【发布时间】:2015-05-02 17:38:42
【问题描述】:
如需更准确地了解我的问题,请查看此处: Polygonally calculate Pi
我使用mpmath、decimal 和其他一些模块来显示超过标准数量的数字,但只有前 15 个是正确的 - 这意味着当我运行我的程序计算 pi 时,第一个之后的其余部分15 位是不准确的。
或者如果我说mpf(1/3),它会打印0.3333333333333331574563241647...。有什么方法可以让 Python 用精确的数字进行计算?这对我来说非常非常重要,因为我的方法会产生像 0.0000000000000000000000245331° 这样的角度,如果它是圆角的,我就有问题了。
我尝试的另一个示例是使用和不使用 decimal 模块计算 0.0001 + 0.0002 - 0.0003。没有它打印0.0,它给出了某种1.5223456224E-31。我假设这个问题来自 Python 的二进制计算?
你知道一种可以精确计算它的语言吗?或者更好地如何在 Python 中实现它?
PS:15位后精度不够的问题出在哪里?
【问题讨论】:
-
是的,它与浮点数的二进制表示有关(这不是 Python独有的,您根本无法用有限数表示无限范围的实数位) - 参见例如docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。如果您使用有理数,请考虑
fractions。 -
也许本指南floating-point-gui.de 会更方便您阅读
-
我不知道它是否适合您的问题,但是您是否已经考虑过使用定点操作?因为它,你只需要乘以,比方说,每个角度 10^6,这样你就可以提高精度。但是,正如您可能注意到的那样,这只是取代了问题......
-
我可以用一个bignum来解决这个问题吗?
标签: python binary polygon digits pi