为什么c#不能计算数学函数的精确值

2024-01-01

为什么c#不能做任何精确的操作。

Math.Pow(Math.Sqrt(2.0),2) == 2.0000000000000004

我知道双打是如何工作的,我知道舍入误差来自哪里,我知道它是almost正确的值,我知道你不能在有限的双精度数中存储无限的数字。但为什么没有办法让c#可以精确计算,而我的计算器却可以呢。

Edit

这与我的计算器无关,我只是举个例子:

http://www.wolframalpha.com/input/?i=Sqrt%282.000000000000000000000000000000000000000000000000000000000000000000000000000000001%29%5E2 http://www.wolframalpha.com/input/?i=Sqrt%282.000000000000000000000000000000000000000000000000000000000000000000000000000000001%29%5E2

Cheers


机会就是你的计算器can't准确地做到这一点 - 但它可能存储的信息比显示的信息多,因此平方后的错误最终超出了显示内容的范围。要么是这样,要么在这种情况下它的错误恰好被抵消了——但这并不等同于以一种刻意的方式让它完全正确。

另一种选择是,计算器会记住导致先前结果的运算,并应用代数来取消这些运算……但这似乎不太可能。 。网当然不会尝试这样做 - 它会计算中间值(二的根),然后对其求平方。

如果你认为you如果可以做得更好,我建议你尝试写出 2 的平方根(例如)小数点后 50 位,然后精确平方。看看你是否得出正好 2...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么c#不能计算数学函数的精确值 的相关文章

随机推荐