我刚刚开始使用MPFR任意精确库,很快就遇到了非常奇怪的行为。使用它的主要目的是提高大参数'trigs‘的精度,这在MPFR中效果非常好。
但后来我决定检查一下简单的数学,这是令人难以置信的-即使在具有严格答案的简单示例中,舍入误差也存在,并且不依赖于使用的精度。
即使在1.1 *1这样的示例中,结果也是1.100000000000008881784...这个结果给出了疯狂的2000位精度(正常双精度下为53)!
也许这是我的系统的问题,但即使在在线MPFR中也存在类似的问题。您可以在网上尝试这样的示例:http://ex-cs.sist.ac.jp/~tkouya/try_mpfr.html
1* 1.1 @ 64位= 1.10000000000000000002
但随着精度的提高,在线版本会进一步移动误差,但在我的安装中-不会。
我的系统: Ubuntu 9.10 + gmp 5.0.0.1 + mpfr 2.4.2
发布于 2010-02-26 15:56:11
This appears to be the canonical answer to floating-point precision issues。它包括解释为什么更多的bits不能解决问题。
旧答案
See question 7 of the MPFR FAQ.无论如何,总会有一些错误,因为无论你使用多少位,许多数字都不能准确地用二进制尾数表示。请参阅相关SO问题的this answer以获得很好的解释。
https://stackoverflow.com/questions/2340155
复制相似问题