gpt4 book ai didi

c# - 为什么 0.9 不总是等于 1

转载 作者:太空狗 更新时间:2023-10-29 21:01:50 25 4
gpt4 key购买 nike

在数学上,0.9 recurring 可以显示为等于 1。然而,这个问题与无穷大、收敛性或这背后的数学无关。

上述假设可以在 C# 中使用 double 表示,如下所示。

var oneOverNine = 1d / 9d;
var resultTimesNine = oneOverNine * 9d;

使用上面的代码,(resultTimesNine == 1d) 的计算结果为 true。

当改用小数时,评估结果为假,但我的问题不是关于 double 和小数的不同精度。

由于没有类型具有无限精度,double 如何以及为什么保持 decimal 不具有的这种相等性?关于 oneOverNine 变量存储在内存中的方式,上面代码的“字面意思”到底发生了什么?

最佳答案

这取决于用于获得最接近 1/9 的可表示值的舍入。无论哪种方式都可以。您可以在 Rob Kennedy 的有用页面上调查可表示性问题:http://pages.cs.wisc.edu/~rkennedy/exact-float

但不要认为 double 可以以某种方式达到精确性。它不是。如果您尝试使用 2/9、3/9 等,您会发现四舍五入的情况。底线是 1/9 不能用二进制 float 精确表示。因此会发生舍入,您的计算会出现舍入误差。

关于c# - 为什么 0.9 不总是等于 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19436159/

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