【问题标题】:MPFR rounding issueMPFR 舍入问题
【发布时间】:2010-02-26 07:49:02
【问题描述】:

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

但后来我决定检查简单的数学,这令人难以置信 - 即使在具有严格答案的简单示例中也存在舍入错误,并且不依赖于使用的精度。

即使在像 1.1 * 1 这样的示例中,结果也是 1.10000000000000008881784... 这个结果以疯狂的 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

【问题讨论】:

    标签: math floating-point bignum mpfr


    【解决方案1】:

    This appears to be the canonical answer to floating-point precision issues。它包括解释为什么更多位不能解决问题。

    旧答案

    See question 7 of the MPFR FAQ. 无论如何,总会有一些错误,因为无论你使用多少位,许多数字都不能用二进制尾数精确表示。请参阅this answer 到相关的 SO 问题以获得很好的解释。

    【讨论】:

    • 谢谢!转换 float -> string -> bigfloat 解决了误差与精度无关的问题。
    猜你喜欢
    • 2013-04-12
    • 2011-08-23
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多