【问题标题】:Fixed precision vs. arbitrary precision固定精度与任意精度
【发布时间】:2014-05-02 11:14:46
【问题描述】:

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

为什么不是所有现代语言都具有事实上的任意精度?使用固定精度数字而不是任意精度有什么特别的原因吗?

如果我不得不猜测那是因为固定精度在某种程度上对应于汇编指令,因此它更优化并且运行速度更快,如果您不必担心溢出,这将是一个值得权衡的选择,因为您知道预先数字范围。有没有固定精度优于任意精度的特定用例?

【问题讨论】:

  • 实际上,如果两个操作数都是整数,默认情况下python将其精度固定为整数,否则它使用IEEE 754单精度浮点。任意/固定精度十进制算术需要使用内置的 Decimal 数据类型,它允许使用任何一种(默认为 28 位精度)。

标签: performance precision arbitrary-precision


【解决方案1】:

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

此外,溢出有符号整数在实践中是非常罕见的。我几乎从来没有发生过。我希望现代 CPU 支持在不影响性能的情况下引发溢出异常。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多