python:如何将使MULTIPLE doubles具备与C++相同的精度?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (67)

我正在将C++程序重写为Python。我需要double类型精度成倍,但C++和Python没有给出相同的结果。下面是一个具有“硬编码”值的示例:

C++

printf("%f", ( 44474025505478620106407223274000875520.0 * 5454277033526873088.0 ) );
>>> 242573655903020442240866171189072992939998568974355791872.0

Python

print("%f" % ( 44474025505478620106407223274000875520.0 * 5454277033526873088.0 ) )
>>> 242573655903020398684723205308949669628048817708024725504.0

我的问题是,我不需要最精确的结果:我需要(用Python)尽可能接近C++的结果。

在我的示例中,15个头位数是相同的:

C++ > 242573655903020[442240866171189072992939998568974355791872.0
Py  > 242573655903020[398684723205308949669628048817708024725504.0

我需要一个更接近的结果(第18位数字就好了)

Python版本:2.7.8

提问于
用户回答回答于

使用库decimal,以您的代码片段为例:

from decimal import Decimal

print("%f" % ( Decimal("44474025505478620106407223274000875520.0") * Decimal("5454277033526873088.0") ) )

它给了242573655903020442240866171189072992939998568974355791872.000000中给出的结果与C完全相同。

用户回答回答于

C版Ideone-结果:

242573655903020442240866171189072992939998568974355791872.000000

Ideone上的Python版本-结果:

242573655903020442240866171189072992939998568974355791872.000000

扫码关注云+社区

领取腾讯云代金券