Frage

ich habe ein Problem mit C # mit. Um genau zu sein mit dem Math.pow (). Wenn ich versuche, 15 ^ 14 zu berechnen dann bekomme ich „29192926025390624“. Aber wenn ich es mit Wolfram Alpha berechne ich bekommen „29192926025390625“. Wie Sie diesen Unterschied sehen kann, ist 1 Nr. Wolfram Alpha ist richtig though. Warum ist nicht C #? und wie kann ich dieses Problem beheben, damit ich den richtigen Wert in C # bekommen? 7

ist mein Code ziemlich einfach, da ich bin nur mit fest einprogrammierten Beispielen versuchen. Also, was ich tue ist: Math.Pow(15,14); Das gibt 29192926025390624. Und nicht „29192926025390625“, das ist die richtige Antwort.

Links: Wolfram Alpha

War es hilfreich?

Lösung

Math.Pow arbeitet auf Gleitkomma-Typen, die sind definitions ungenau. Wenn Sie beliebig genaue Zahlen benötigen, verwenden Sie einen beliebige Genauigkeit Integer-Typen wie die BigInteger Struktur. BigInteger hat auch eine Pow Methode.

Andere Tipps

Math.Pow arbeitet auf Doppelzimmer. Diese Implementierung mit lang wird die richtige Antwort:

Func<long, int, long> power = null;
power = (i, p) => p == 1 ? i : i*power(i, p - 1);
Console.WriteLine(power(15, 14));

Math.Pow arbeitet auf Doppelzimmer. Doubles sind 64-Bit-Gleitkomma- und haben etwa 15-16 Genauigkeitsziffern in C # , und daher, was Sie sehen, ist ein Rundungsfehler. Das ist, wie Punktzahl Arbeit schweben.

Wenn Sie mehr Präzision benötigen, versuchen dezimal . Es ist 128 Bits und verwendet 10 als Basis. Dies gibt Ihnen eine genaue Darstellung von Zahlen bis zu 28-29 signifikante Stellen. Sie können Ihre eigene Pow Methode für dezimal leicht definieren.

Wenn decimal nicht genug ist, lesen Sie auf BigInteger , die in .NET 4 hinzugefügt wurde.

Math.Pow () korrekt funktioniert sein Problem mit doppeltem Datentyp    sieht dies.

        double i = 29192926025390625;
        Console.WriteLine("{0}",i);//the result will be 29192926025390624.0

Oops Sorry, Prüfwert von Breakpoint; in Ihrem Programm;

C # 's Math.pow gibt ein Double, ein IEEE-754-Standard-Gleitkommazahl. Es hat nur 15 signifikante Stellen:

http://msdn.microsoft.com/en- us / library / system.math.pow.aspx http://math.byu.edu/~schow/work/IEEEFloatingPoint.htm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top