固定精度与任意精度

时间:2014-05-02 11:14:47

标签: performance precision arbitrary-precision

许多现代语言都支持任意精度数字。 Java有BigInteger,Haskell有Integer,Python实际上是任意的。但是对于很多这些语言来说,任意精度都不是事实上的,而是以' Big'为前缀。

为什么所有现代语言都没有任意精确的事实?是否有一个特殊的理由使用固定精度数字而不是任意精度?

如果我不得不猜测这是因为固定精度在某种程度上与装配说明相对应,所以它更优化并且运行得更快,如果你不必担心这将是值得的权衡关于溢出,因为你事先知道数字范围。是否存在固定精度超过任意精度的特定用例?

2 个答案:

答案 0 :(得分:2)

这是性能和功能/安全性之间的权衡。我想不出任何理由为什么我更喜欢使用溢出整数而不是性能。此外,如果我需要,我可以轻松地模拟溢出语义与非溢出类型。

另外,在实践中,溢出有符号的int是非常罕见的。我几乎从未发生过。我希望现代CPU支持在溢出时引发异常,而不会产生性能成本。

不同的语言强调不同的功能(性能也是一个功能)。这很好。

答案 1 :(得分:1)

固定精度可能比任意更快;不要混淆固定的精度和机器本身的精度。在某些情况下,您可以使用扩展(但固定)的精度。我自己经常使用伟大的专家D.H. Bailey(见http://crd-legacy.lbl.gov/~dhbailey/mpdist/)的优秀库qd,例如可以在Linux系统上轻松安装。这个库提供了两种固定精度类型,其精度高于原生双精度,但它们(到目前为止)比已知的任意精度库更快。