floating-point - 为什么/何时使用 float 而不是 BigDecimal

标签 floating-point bigdecimal

这可能是一个幼稚或沉重的问题,但在调试 float 问题后,我有一个问题要问:

如果由于 float 和 bigdecimals 之间以 2 为基数与以 10 为基数的表示差异而存在 float 的舍入问题……为什么/什么时候使用 float 与 bigdecimals?

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

在我看来,数学的准确性胜过使用 float 所带来的任何性能提升......所以为什么软件世界不直接放弃 float 并说,“抱歉,我们要全力以赴-在 BigDecimal 上”?

最佳答案

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

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

另一方面,当您处理物理测量时,小数结果本身只是一个近似值。我不相信任何物理量的测量精度都达到 IEEE 754 64 位 float ,这是最常见的 double 实现。

有一种误解认为 BigDecimal 库消除了舍入问题。它们只对可以精确表示为相当短的小数部分的数字有所帮助。 BigDecimal 在表示三分之一方面并不比 double 好多少。

关于floating-point - 为什么/何时使用 float 而不是 BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43852302/

相关文章:

javascript - 如何创建新的 MathContext?

java - 如何从仅包含整数部分的 BegDecimal 数字生成字符串

python - 按给定精度舍入 float

c++ - 限制浮点精度?

java - 使用 MathContext 调用时,BigDecimal.divide() 会产生额外的精度数字

java - 使用bigdecimal在mysql中存储百分比值

java - 为什么 BigDecimal 构造函数实例具有不同的值?

java - 在 Java 中使用 Double 与 BigDecimal 解析 double 值

JavaScript - 在什么操作之后需要 toFixed() 以及应该传递什么参数?

c - 浮点: how many matching significant figures?