Rechenfunktionen
lima-city → Forum → Programmiersprachen → Java
basis
code
dank
echten algorithmus
exponent
funktion
hausaufgabe
http
kleine hilfe
native
operation
pointer
potenz
schleife
share
tip
url
wende
wurzel
ziehen
-
Hallo Community,
Ich habe eine Frage bezüglich der Funktionen in Java. Es ist so, dass ich gerne den Sinn bzw was hinter Sachen wie z.B. Wurzeln oder Potenzen steckt. wenn ich jetzt eine Funktion (a,b) habe, wobei a die basis und b der exponent ist kreiren will, wie mach ich das am besten?
klar gibts es auch Math.sqrt(), brauche aber die Funktion welche unter math.sqrt() praktisch gespeichert ist
vielen Danke -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
http://de.wikipedia.org/wiki/Heron-Verfahren
Das als kleine Hilfe, ansonsten werden wir deine Hausaufgaben nicht machen, du sollst ja was lernen bei -
Was wäre das I-Net ohne Suchmöglichkeiten. Erstaunlicherweise hatte schon jemand vor die ein ähnliches Problemchen:
http://www.java-forum.org/java-basics-anfaenger-themen/137735-applikativer-algorithmuss-wurzel-ziehen.html.
Wenn du allerdings den "echten" Algorithmus /Code haben willst müsstest du dich wohl eher direkt an Oracle / Sun Microsystems wenden.
Beitrag zuletzt geändert: 19.11.2014 16:53:52 von mein-wunschname -
mein-wunschname schrieb:
Oder einfach hier nachschauen: /jdk/src/share/native/java/lang/fdlibm/src/e_sqrt.c
Wenn du allerdings den "echten" Algorithmus /Code haben willst müsstest du dich wohl eher direkt an Oracle / Sun Microsystems wenden.
-
Zuerst mal Danke' aber das Ist leider keine Hausaufgabe und der Tipp war auch nicht allzu hilfreich, da ich da schon drauf gekommen bin wie es läuft :-)
Viel mehr geht's mir um die Umsetzung bei Java in einer Funktion. Meine Funktion Potenz(a,b) würde ich so definieren: for(var s=b;s<s*b;s=b+b) mit b als Basis und a als exponent.
Jedoch ist dies falsch und ich frage mich wie es richtig geht und bitte um Hilfe -
maxilvlilian schrieb:
Meine Funktion Potenz(a,b) würde ich so definieren: for(var s=b;s<s*b;s=b+b) mit b als Basis und a als exponent.
Unabhängig von der Programmiersprache: wenn b die Basis ist, und a der Exponent, wo kommt der in deiner for-Schleife denn vor?? Wenn du bei deiner Berechnung den Exponenten nicht berücksichtigst, ist es nicht verwunderlich, dass das Ergebnis nicht stimmt. -
bah, mit nem Einzeiler kann ich dir nicht helfen bei Exponent, aber wenn das das Problem ist, sehe ich 3 ursachen in deinem Lösungsansatz:
1. s ist eine temporäre variable und verschwindet nach deinem einzeiler... dein for müsste das return s spucken...
2. wo ist a?
3. s<s*b ist totaler Käse als Begrenzer (ist dasselbe wie b<(3*b)... )
4. s=b+b und täglich grüßt das murmeltier? (s bleibt immer 2*b... bis in alle ewigkeit...)
also, ausdruck 2 und 3 sorgen jeweils alleine dafür, dass er die schleife nie verlässt...
zudem hast du es nicht mal quadriert... sondern mit 2 multipliziert...
ich würd dir raten, der erste Lösungsschritt ist, einen Mathekurs für 5./6.Klässler zu besuchen... -
Im Übrigen fällt mir gerade ein, dass es (in C) einen völlig anderen, sehr effizienten Ansatz gibt wie man eine Wurzel berechnen kann, bei dem man eine fixe Anzahl von Befehlen ausführt (nix Schleifen usw). Code:
float Value; float halfValue; float tempSqrt; unsigned int* ptr; inline float FastSqrt(float r) { if(r == 0.0f) return 0.0f; if(r < 0.0f) r = -r; Value = r; halfValue = 0.5f * r; ptr = (unsigned int*) &r; *ptr = (0xbe6f0000 - *ptr) >> 1; tempSqrt = r; // spart man sich diese beiden Zeilen wirds etwas ungenauer, // dafür aber auch schneller tempSqrt *= 1.5f - tempSqrt * v * halfValue; tempSqrt *= 1.5f - tempSqrt * tempSqrt * halfValue; return Value * tempSqrt; }
In Java musst du die Pointer-Operation über
nachbilden.Float.floatToRawIntBits()
-
Hallo,
da ja jede Rechenart auf die Grundstrucktur zurück führt würde ich einfach
zB. 2^5=32 mit 2*2*2*2*2=32 in einer Schleife errechnen.
Und da es keine Hausaufgabe ist, hier mein JAVA-Code ...
private static int potenz(final int a, final int b){ int c = 1; for (int i = 0; i < b; i++) { c = a * c; } return c; }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage