2016-08-10 4 views
-1

ich folgende Berechnung in meiner Java-KlasseMath.pow Beschränkung die Berechnung auf eine Dezimalstelle

Math.pow (0,0901/12 * (1 + 0,0901/12), 356,966667)

zu tun versuchen, Ich bekomme 0.0 als Ergebnis. Jedoch ist das erwartete Ergebnis 0.1044

+0

Nein, Mathematik sagt, es ist 0, oder wahrscheinlich so etwas wie 0,00000000000001 – AmazingDreams

+1

0,0901/12 * (1 + 0,0901/12) ist gleich 0,0075647084027 (7). Wenn Sie es auf eine Potenz von 357 erhöhen, erhalten Sie eine unglaublich kleine Zahl, die unter der Genauigkeitsgrenze des Doppels liegt, deshalb erhalten Sie 0.0. – Dth

+0

Ihre Basis sollte etwa ~ 0.993779 sein, damit bei dieser Leistung die erwartete Antwort angezeigt wird. – Slimu

Antwort

2

Ich bin nicht so sicher, dass Ihr Ergebnis 0.10844 sein sollte. Die Basennummer ist ungefähr so ​​~ 0.00756 und Sie erhöhen sie auf eine positive Potenz von ~ 357. Das bedeutet, dass Sie für eine so große Macht viel mehr Nullen nach dem Komma haben werden. Das heißt, Sie haben einen positiven Wert, der kleiner ist als der doppelte Wert, und er wird auf 0,0 gerundet.

Mit BigDecimal erhalten Sie den folgenden Wert: ~ 7.08E-756 für Ihre Berechnung, während der kleinste positive Doppelwert (Double.MIN_VALUE) 4.9E-324 ist. Dies bedeutet, dass 0.0 Ihr gerundeter Wert ist.

+0

Ich habe versucht, es mit 'System.out.printf ("%. 20f ", Math.pow (...)) anzuzeigen;', immer noch kein Glück. Ich denke, der OP hat irgendwo etwas falsch verstanden. – progyammer

+0

Die Zahl enthält zu viele Nullen nach dem Komma. – Slimu

+0

Nun, ich glaube nicht, dass "float" oder "double" diese vielen Orte unterstützen ... [Wolfram] (https://www.wolframalpha.com/input/?i= ((0.0901 +% 2F + 12) * (1% 2B (0.0901 +% 2F + 12))) +% 5E + 356.966667) – px06