2024-10-03 11:13:18 发布
网友
我试过了
Erlang $ erl 1> Pi = 22/7. 3.142857142857143 Haskell $ ghci Prelude> 22/7 3.142857142857143 Python $ python >>> 22/7.0 3.142857142857143 Ruby $ irb 2.1.6 :001 > 22 / 7.0 => 3.142857142857143
结果是一样的。为什么?在
发生这种情况是因为所有的语言都对非整数使用相同的数值表示:IEEE 754 floating point numbers,很可能具有相同的精度级别。(32位“浮点”或64位“双精度”,取决于系统和语言的配置方式。)
浮点数是此类操作的默认选择,很大程度上是因为硬件直接支持浮点数。然而,从根本上讲,没有什么能阻止语言支持其他类型的数字。这在Haskell中最容易演示,Haskell的标准库中有有理数:
λ> 22/7 :: Rational 22 % 7
有理数是一个分数,所以它存储为一对整数,并且在除法时不会损失任何精度。同时,有些运算比普通浮点数更困难,效率更低。在
另一种可能的表示是fixed-point numbers,它的范围比浮点数小,但在保持精度方面做得更好。(我真的在这里省去了很多细节。)你也可以在哈斯凯尔试试这些:
发生这种情况是因为所有的语言都对非整数使用相同的数值表示:IEEE 754 floating point numbers,很可能具有相同的精度级别。(32位“浮点”或64位“双精度”,取决于系统和语言的配置方式。)
浮点数是此类操作的默认选择,很大程度上是因为硬件直接支持浮点数。然而,从根本上讲,没有什么能阻止语言支持其他类型的数字。这在Haskell中最容易演示,Haskell的标准库中有有理数:
有理数是一个分数,所以它存储为一对整数,并且在除法时不会损失任何精度。同时,有些运算比普通浮点数更困难,效率更低。在
另一种可能的表示是fixed-point numbers,它的范围比浮点数小,但在保持精度方面做得更好。(我真的在这里省去了很多细节。)你也可以在哈斯凯尔试试这些:
^{pr2}$相关问题 更多 >
编程相关推荐