Nur um zu bestätigen, was Chris Shain schrieb, bekomme ich die gleichen Binärwerte:
// Java
public class Test
{
public static void main(String[] args)
{
double input = 0.392156862745098;
double pow = Math.pow(input, 1.0/3.0);
System.out.println(Double.doubleToLongBits(pow));
}
}
// C#
using System;
public class Test
{
static void Main()
{
double input = 0.392156862745098;
double pow = Math.Pow(input, 1.0/3.0);
Console.WriteLine(BitConverter.DoubleToInt64Bits(pow));
}
}
Ausgabe von beiden: 4604768117848454313
Mit anderen Worten sind die doppelten Werte genau das gleiche Bitmuster und alle Unterschiede, die Sie sehen (vorausgesetzt, Sie erhalten die gleichen Ergebnisse), sind auf Formatierung anstatt auf einen Unterschied im Wert zurückzuführen. By the way, ist der genaue Wert dieses Doppels
0.73195874952002271118800535987247712910175323486328125
Jetzt lohnt es sich unter Hinweis darauf, dass deutlich seltsame Dinge in Gleitkomma-Arithmetik passieren können, vor allem, wenn Optimierungen ermöglichen 80-Bit-Arithmetik in einigen Situationen, andere aber nicht, usw.
Wie Henk sagt, wenn ein Unterschied in den letzten ein oder zwei Problemen Sie Probleme verursacht, dann ist Ihr Design gebrochen.
Ihr Code wird, auch nicht reproduzierbare Ergebnisse in .net geben, so es vergessen . Related: http://stackoverflow.com/questions/6683059/are-floating-point-numbers-consistent-in-c-can-they-be – CodesInChaos
Wirklich? Die 17. signifikante Ziffer gibt Ihnen "ausreichende Unterschiede in weiteren Berechnungen"? Können Sie uns ein Beispiel geben? –
Wenn man es mit calc.exe & wolfram alpha vergleicht, ist die 1 sowieso falsch. Ich würde bei der Implementierung von Java bleiben. –