gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:48:44 25 4
gpt4 key购买 nike

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

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

我知道 double 是如何工作的,我知道舍入误差的来源,我知道它几乎是正确的值,而且我知道你不能在有限 double 中存储无限数字。但为什么没有一种方法可以让 c# 准确计算它,而我的计算器可以做到。

编辑

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

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

干杯

最佳答案

很可能您的计算器不能完全做到这一点 - 但它可能存储的信息多于显示的信息,因此平方后的误差最终会超出显示的范围。要么,要么它的错误在这种情况下恰好被抵消了——但这与以有意的方式完全正确是不一样的。

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

如果您认为可以做得更好,我建议您尝试将二的平方根写到(比方说)小数点后 50 位,然后精确平方。看看你是否刚好拿出 2...

关于c# - 为什么c#不能计算数学函数的精确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4603776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com