在存在 Decimal 的语言(C#、Python)中,它比 float/double 慢,因为硬件层面不支持它。那么为什么 DPD(密集压缩十进制)、BID(二进制整数十进制)、Decimal64 等没有像浮点数的 FPU 那样的硬件实现来提高执行速度,即使 DPD、BID 都符合 IEEE 754-2008 标准呢?
拥有定点硬件支持,而不仅仅是浮点支持,确实很棒。
目前可行的方案是使用(intnum,scale),平均值为intnum * 10-scale。
浮点有如此多的支持是由于许多几何函数,如 sin、cos、ln、e 等都是可优化的,即在硬件中。
更遗憾的是,除了 COBOL 和 SQL 之外,定点没有获得太多语言支持。
新一代的硬件支持会很好,并且已经存在更好的浮点标准。然而现实并不青睐理想优雅的建筑。
反馈(为什么我提到定点w.r.t. DPD等)
浮点是标准中 2(负)幂的近似值。 定点必须(隐式)使用 10 的幂。因此 BCD、密集小数或实际上是 int64 大整数开始发挥作用。我的假设是,这种格式接近人类对十进制数字的表示,并且主要对定点有用。
IBM z 系列处理器具有对十进制浮点的硬件支持。 这些都是非常高端的“不惜成本”的机器,所以在那里看到它并不太令人惊讶。
至于为什么更多的商品加工商不这样做,主要是成本和需求的问题。 需求很低,因为十进制浮点仍然存在舍入问题(它们只是出现与二进制浮点不同的值)。