【问题标题】:Why/when to use floats instead of BigDecimal为什么/何时使用浮点数而不是 BigDecimal
【发布时间】:2017-05-08 16:03:31
【问题描述】:

这可能是一个天真的问题,但在调试浮点数问题后,我有一个问题要问:

如果由于浮点数和大小数之间的整个基数 2 与基数 10 的表示差异而导致浮点数舍入问题……您为什么/何时使用浮点数与大小数?

几乎所有主要的编程语言都有一个 BigDecimal 库......所以

在我看来,数学的准确性胜过使用浮点数所带来的任何形式的性能提升......那么为什么软件世界不放弃浮点数并说:“对不起,我们将全力以赴——在 BigDecimal 上”?

【问题讨论】:

  • “数学”?谁使用 BigDecimal(或二进制浮点)进行数学运算?两个系统都不能代表1/3,更不用说√2了。
  • 浮点数/双精度数通常由硬件支持,因此比通常在软件中实现的 BigDecimals 快很多

标签: floating-point bigdecimal


【解决方案1】:

关键问题是您的应用程序是否会受益于终止小数的精确表示。

能够准确地表示 1.01 这样的数字在财务计算中非常非常有用。

另一方面,当您处理物理测量时,十进制结果本身只是一个近似值。我不相信任何物理量都被测量到了 IEEE 754 64 位浮点数的精度,这是双精度的最常见实现。

BigDecimal 库消除了舍入问题是一种误解。它们仅对可精确表示为合理短小数的数字有所帮助。 BigDecimal 在代表三分之一方面的表现并不比两倍好。

【讨论】:

    【解决方案2】:

    假设您正在收集大量测量数据。您知道您的传感器已经为您提供了 5% 的错误率。为什么要花费 大量 额外的计算能力来实现对这些数据的 100% 正确计算?!可以说,我们不是在谈论 10 MB 的数据;但是 10 TB。或 PB。您仍然相信使用 BigDecimal 处理这些数据是值得的吗?

    换句话说:在很多情况下,您绝对不需要 100% 的正确性。然后你就不愿意支付与那 100% 相关的价格标签。

    我完全同意:例如,一旦我们谈论代表货币的数字,我们就会尽我们所能避免四舍五入错误。但我们根本不需要对所有数据一视同仁。因为在现实世界中,有很多不同的要求;良好的工程设计就是在给定这些约束的情况下选择能够提供最佳解决方案的工具。

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多