我正在开发一些工具来计算在最坏情况下可以接近的数字1e-25
,并在 Java 中将它们一起比较。我显然使用双精度。
我在另一个答案1e-15
中读到,我不应该期望超过1e-17
精度,而另一个问题涉及在以“更好”的顺序排序操作时获得更好的精度。
哪些双精度操作更热衷于在此过程中降低精度?我应该尝试使用尽可能大的数字还是尽可能小的数字?在乘法之前先做除法吗?
我宁愿不使用BigDecimal
类或等价物,因为代码已经足够慢了;)(当然,除非它们不会对速度产生太大影响)。
任何信息将不胜感激!
编辑:数字在绝对值(1e-25)中“小”的事实并不重要,因为 double 可以下降到 1e-324。但重要的是,当它们非常相似时(都在 1e-25 中),我必须比较,比如说 4.64563824048517606458e-21 和 4.64563824048517606472e-21(差异是第 19 位和第 20 位)。在计算这些数字时,差异是如此之小,以至于我可能会遇到“舍入误差”,其中余数被随机数填充。
问题是:“如何对计算进行排序以使这种精度损失最小化?”。它可能在乘法之前先进行除法,或者先进行加法。