这可能是一个天真或加载的问题,但在经历调试浮点数问题后,我有一个问题要问:
如果浮点数存在舍入问题,因为浮点数和大数字之间存在整个基数2与基数10表示的差异...为什么/何时使用浮点数与大数字?
几乎所有主流编程语言都有BigDecimal库... soo
在我看来,数学的准确性胜过你使用花车所带来的任何性能提升......所以为什么软件世界没有放弃浮动并说,“对不起,我们要全部 - 在BigDecimal上?“
答案 0 :(得分:4)
关键问题是您的申请是否会受到终止小数部分的精确表示的好处。
能够准确地表示1.01之类的数字在财务计算中非常非常有用。
另一方面,当您处理物理测量时,十进制结果本身只是一个近似值。我不相信任何物理量都被测量到IEEE 754 64位浮点数的精度,这是最常见的双打实现。
有一种误解,认为BigDecimal库会删除舍入问题。它们仅对可以作为合理的短小数部分表示的数字起作用。在代表三分之一时,BigDecimal并不比双倍更好。
答案 1 :(得分:2)
假设您正在收集大量测量数据。您知道您的传感器已经提供了5%的错误率。为什么要花费很多额外的计算能力来实现对该数据的100%正确计算?!让我们说,我们不是在谈论10 MB的数据;但10 TB。或者Petabyte。您是否仍然确信使用BigDecimal处理该数据是否值得?
换句话说:在很多情况下,你绝对不需要100%的正确性。然后你不愿意支付与100%相关的价格标签。
我完全同意:例如,一旦我们谈论代表货币的数字,我们就尽力避免舍入错误。但我们根本不需要对所有数据进行相同处理。因为在现实世界中,有许多不同的要求;良好的工程学就是选择能够提供最佳解决方案的工具,只要约束。