除了浮点数,数字还能怎么存?

More Floating Point Alternatives

除了浮点数,数字还能怎么存?

我们习惯的浮点数并非唯一选择。文章盘点了五种替代方案:十进制浮点(如Python的decimal模块)、精确分数运算、符号计算(保留sqrt(2)而非近似值)、区间算术(追踪误差范围)以及古老的二进制编码十进制(IBM旧式存储)。这些方法虽在软件层面实现、速度较慢,却在金融、数学等对精度要求严苛的领域不可或缺。从Mathematica到Java BigDecimal,不同语言提供了各异的实现库,为开发者打开了更广阔的数值计算视野。

这些替代方案都在软件层面实现(而非硬件),因此速度较慢,且不同语言拥有不同的库支持。
  1. AlotOfReading

    通常情况下,如果你对自己的算法了解得足够深入,能够挑选合适的浮点数替代方案,那你也就懂得如何修复现有的浮点代码,而这才是你真正该做的事。

    话虽如此,列表中的某些选项其实算不上替代方案。符号计算完全是另一回事。区间运算可以构建在浮点数之上(例如 IEEE-1788),并且自有一套令人费解的行为模式。BCD 如今更应该被称为历史遗留产物,而非替代方案。

    这份列表里真正能算替代方案的,其实只有有理数和十进制浮点数,但如果你正在考虑浮点数的替代方案,它们恐怕也解决不了你面临的问题。

  2. MiroslavPokorny

    很奇怪,最显而易见的定点数居然没被提到。

  3. schiffern

    虽然列表里没有十进制格式,但业余计算语言 Frink 支持精确的有理数分数、任意宽度的大整数(图中未展示)、区间运算以及符号表达式。

    https://frinklang.org/fsp/frink.fsp?fromVal=new+interval%5B-...

同日更多故事

2026-09-22