Math MPFR四舍五入问题

Math MPFR四舍五入问题,math,floating-point,bignum,mpfr,Math,Floating Point,Bignum,Mpfr,我刚刚开始使用MPFR任意精度库,很快就会遇到非常奇怪的行为。使用它的主要目的是提高大参数“trig”的精度,这在MPFR中非常有效 但后来我决定检查一下简单的数学,这是难以置信的-即使在有严格答案的简单例子中,舍入误差也存在,并且不取决于使用的精度 即使在像1.1*1这样的示例中,结果也是1.100000000000008881784。。。 这个结果给出了疯狂的2000位精度(正常双精度为53) 也许这是我的系统的问题,但即使在在线MPFR中也存在类似的问题。您可以在线尝试以下示例: 1*1.

我刚刚开始使用MPFR任意精度库,很快就会遇到非常奇怪的行为。使用它的主要目的是提高大参数“trig”的精度,这在MPFR中非常有效

但后来我决定检查一下简单的数学,这是难以置信的-即使在有严格答案的简单例子中,舍入误差也存在,并且不取决于使用的精度

即使在像1.1*1这样的示例中,结果也是1.100000000000008881784。。。 这个结果给出了疯狂的2000位精度(正常双精度为53)

也许这是我的系统的问题,但即使在在线MPFR中也存在类似的问题。您可以在线尝试以下示例:

1*1.1@64位=1.100000000000000002

但在线版本会随着精度的提高而进一步移动错误,但在我的安装中-不会

我的系统:Ubuntu 9.10+gmp 5.0.0.1+mpfr 2.4.2。它包括解释为什么更多位不能解决问题

旧答案


无论如何,总会有一些错误,因为无论使用多少位,许多数字都不能用二进制尾数精确表示。请参阅相关的SO问题以获得良好的解释。

谢谢!转换浮点->字符串->大浮点解决了误差和精度无关的问题。