跟踪双算术中的最大误差

时间:2018-05-02 18:26:00

标签: java double precision

a表示给定的有理数/实数,最大误差为epsilon。如果我添加两个双精度数,则还会累加最大误差。对于乘法,我也可以给出最大误差的估计值。

是否有合理的方法来跟踪此算术错误?我想知道我知道给定数字的准确程度。

我以为我构造了两个有理数的数据类型(主数和错误)并定义了这个数据类型的操作,但也许我只是重新发明已经存在的东西,或者我的概念太复杂了。

1 个答案:

答案 0 :(得分:1)

有两种解决方案只需要现有的库。

如果您的数字总是合理的,您可以使用合理的算术库。它们将每个数字存储为一对整数的比率。仅给出合理计算的有理数算术应该是精确的。维基百科的List of arbitrary-precision arithmetic software列出了几个支持有理数的Java库。

BigDecimal,已在注释中提到,可用于提高精度,但仅适用于有限长度的小数部分。您可以在有理算术中精确计算1/3,但只能在BigDecimal中近似它。

理性算术取决于所有数字的准确性,这些数字完全由理性表示。这可能会破坏计算,例如平方根。 Interval arithmetic是一种替代方案,它不会给您提供准确性,但会让您知道可能的舍入错误的范围。每个变量由已知包含实数算术值的区间表示。