【发布时间】:2013-06-15 06:20:49
【问题描述】:
我正在开发一些工具来计算在最坏情况下可以接近1e-25 的数字,并在 Java 中将它们一起比较。我显然使用的是双精度。
我在another answer 中读到,我不应该期望超过1e-15 到1e-17 的精度,this other question 涉及在以“更好”的顺序排序操作时获得更好的精度。
哪个双精度运算更热衷于在此过程中降低精度?我应该尝试使用尽可能大的数字还是尽可能小的数字?先除法再乘法?
我宁愿不使用BigDecimal 类或等效类,因为代码已经够慢了;)(当然,除非它们不会对速度造成太大影响)。
任何信息将不胜感激!
编辑:数字的绝对值“小”(1e-25)这一事实并不重要,因为 double 可以下降到 1e-324。但重要的是,当它们非常相似时(都在 1e-25 中),我必须比较,比如说 4.64563824048517606458e-21 到 4.64563824048517606472e-21(差异是第 19 位和第 20 位)。当计算这些数字时,差异是如此之小,以至于我可能会遇到“舍入误差”,其中余数被随机数填充。
问题是:“如何对计算进行排序以使这种精度损失最小化?”。它可能在乘法之前先做除法,或者先做加法。
【问题讨论】:
-
谢谢,我会看看并回复你,但听起来很有希望。
-
关于取消的部分是我要找的!您可以将其发布为答案以便我接受吗?
-
很高兴它有帮助。欢迎您回答自己的问题并接受自己的答案。如果以后的用户觉得它有帮助,他们可以对您的问题和答案都投赞成票。
标签: java double precision arbitrary-precision