我在使用 C# 时遇到问题。准确地说是 Math.pow()。如果我尝试计算 15^14,则会得到“29192926025390624”。但如果我用 Wolfram Alpha 计算它,我会得到“29192926025390625”。如您所见,唯一的区别是 1 个数字。不过,Wolfram Alpha 是正确的。为什么不是 C# ?我该如何解决这个问题,以便在 C# 中获得正确的值?7
我的代码相当简单,因为我只是尝试使用硬编码的示例。所以我正在做的是:
Math.Pow(15,14);
这给出了29192926025390624
。而不是正确答案“29192926025390625”。
Math.Pow
对浮点类型进行操作,这些类型“根据定义”是不准确的。如果您需要任意精度整数,请使用任意精度整数类型,例如 BigInteger 结构。 BigInteger 还有一个 Pow 方法。
适用于双打。 双精度数是 64 位浮点数,在 C# 中具有大约 15-16 位精度,因此,您看到的是舍入误差。这就是浮点数的工作原理。 如果需要更高的精度,请尝试使用
decimal。它是128位,以10为基数。这可以准确表示最多 28-29 位有效数字。您可以轻松定义自己的十进制 Pow 方法。 如果
decimal
还不够,请转向.NET 4中添加的
BigInteger。
double i = 29192926025390625;
Console.WriteLine("{0}",i);//the result will be 29192926025390624.0
哎呀抱歉,通过断点检查值;在你的程序中;