我遇到了C#的问题。精确地使用Math.pow()。如果我尝试计算15^14,那么我会得到“29192926025390624”。但如果我用Wolfram Alpha计算,我会得到“29192926025390625”。正如你所看到的,唯一的区别就是1号码。 Wolfram Alpha是正确的。为什么不是C#?我如何解决这个问题,以便我可以在C#中获得正确的值?7Math.Pow计算不正确
我的代码相当简单,因为我只是尝试使用硬编码示例。所以我在做什么:Math.Pow(15,14);
这给了29192926025390624
。而不是“29192926025390625”这是正确的答案。
没有看到你的代码,任何事情都是猜测。我的猜测是Wolfram Alpha正在使用更高精度的浮点类型来计算它。 – ChrisF 2010-11-28 15:23:08
顺便说一句,假设29192926025390625是正确的(它看起来是正确的:它以“5”结尾),那么Math.Pow按照规范行事:29192926025390624 **是最接近的双精度IEEE 754数字。其他附近的双精度数字是29192926025390628. – 2010-11-28 15:39:08
它是正确计算;这是你对浮点算术的理解,以及`Math.Pow`的缺陷规范。享受:http://docs.sun.com/source/806-3568/ncg_goldberg.html – jason 2010-11-28 15:46:10