public static float sqrt(float x) {
float xhalf = 0.5f*x;
int i = Float.floatToIntBits(x);
i = 0x5f3759df - (i>>1);
x = Float.intBitsToFloat(i); <----- EDIT: x is modified here (smh)
x = x*(1.5f - xhalf*x*x);
return x*2;
}
public static float sqrtWITHOUTXHALF(float x) {
int i = Float.floatToIntBits(x);
i = 0x5f3759df - (i>>1);
x = Float.intBitsToFloat(i);
x = x*(1.5f - (x/2)*x*x); // <---- replaced with parens
return x*2;
}
Zum Beispiel ist die sqrt (2) für die Spitze 1,4139, während die zweite 1,8855 ist.Warum ändert das Entfernen dieses ersten Teils die Antwort? - (umgekehrte Quadratwurzel, Java)
Warum sollte Ersetzen der xhalf Variable mit entweder (x/2) oder (x * 0,5f), der sich ergebende Wert ändern?
EDIT: WOW, das war sehr dumm von mir für das nicht zu sehen. Ich werde das aber nicht löschen, Seufzer.
Es ist nicht die einzige Änderung. xhalf wird nicht durch die Operation auf i modifiziert, wo x/2 – Richard
Es könnte einfach die Reihenfolge der mathematischen Operationen sein, bei einer Schätzung. – ManoDestra
Aus dem einfachen Grund ist die xhalf in der ersten Methode nicht gleich x/2 in der zweiten Methode. Die mathematischen Operationen, die Sie ausführen, sind sehr unterschiedlich. So einfach ist das. – e4c5