有没有公司被浮点数据烧毁导致舍入问题的例子?我们正在实施一个新系统,所有货币值都存储在浮点数中.我想如果我能够展示出为什么会失败的实际例子,它将比为什么价值无法正确存储的理论更重要.
这些示例来自嵌入式世界(Ariane 5、Patriot),但严格意义上不是浮点舍入错误。Ariane 5 bug 是转换中的一个 bug。Patriot bug 是在软件改编过程中引入的。它涉及以不同精度进行计算,并使用本质上不可表示的常数(恰好是看起来无害的 0.10)。
我预见货币值的二进制浮点数存在两个问题:
像 0.10 这样常见的十进制值无法准确表示。
如果精度太小,可能会引发异常的干净溢出会变成难以跟踪的精度损失。
请注意,以 10 为基数的浮点格式已针对货币价值进行了精确标准化:某些货币的价值为 1/1000000 美元,交换量永远不会少于数千,并且您可能希望能够表示的最大金额按比例计算大,所以可扩展的表示是有意义的。其目的是尾数足够大,可以满足官方分辨率的最大总和。