为什么c#不能做任何确切的操作.
Math.Pow(Math.Sqrt(2.0),2) == 2.0000000000000004
Run Code Online (Sandbox Code Playgroud)
我知道双打是如何工作的,我知道舍入误差来自哪里,我知道它几乎是正确的值,而且我知道你不能在有限的双精度中存储无限数.但是为什么没有一种方法可以让c#完全计算出来,而我的计算器可以做到.
编辑
这不是我的计算器,我只是举个例子:
干杯
机会是你的计算器不能完全做到 - 但它可能存储的信息比它显示的更多,所以平方后的错误最终会超出显示的范围.要么是这种情况,要么在这种情况下它的错误会被取消 - 但这与以正当的方式完全正确地解决它并不相同.
另一种选择是计算器记住导致先前结果的操作,并应用代数来取消操作......但这似乎不太可能..NET 肯定不会尝试这样做 - 它将计算中间值(两个根),然后将其平方.
如果您认为自己可以做得更好,我建议您尝试将两个平方根写入(比方说)50个小数位,然后将其完全平方.看看你是否正好2 ...