双a
表示给定的有理数/实数,最大误差为epsilon
。如果我添加两个双精度数,则还会累加最大误差。对于乘法,我也可以给出最大误差的估计值。
是否有合理的方法来跟踪此算术错误?我想知道我知道给定数字的准确程度。
我以为我构造了两个有理数的数据类型(主数和错误)并定义了这个数据类型的操作,但也许我只是重新发明已经存在的东西,或者我的概念太复杂了。
答案 0 :(得分:1)
有两种解决方案只需要现有的库。
如果您的数字总是合理的,您可以使用合理的算术库。它们将每个数字存储为一对整数的比率。仅给出合理计算的有理数算术应该是精确的。维基百科的List of arbitrary-precision arithmetic software列出了几个支持有理数的Java库。
BigDecimal,已在注释中提到,可用于提高精度,但仅适用于有限长度的小数部分。您可以在有理算术中精确计算1/3,但只能在BigDecimal中近似它。
理性算术取决于所有数字的准确性,这些数字完全由理性表示。这可能会破坏计算,例如平方根。 Interval arithmetic是一种替代方案,它不会给您提供准确性,但会让您知道可能的舍入错误的范围。每个变量由已知包含实数算术值的区间表示。