我正在将C++程序重写为Python。我需要乘以2的双精度数,但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
C++编译器:cl.exe(Visual Studio中的一种)
参考方案
使用库decimal
,以您的代码段为例:
from decimal import Decimal
print("%f" % ( Decimal("44474025505478620106407223274000875520.0") * Decimal("5454277033526873088.0") ) )
它提供的242573655903020442240866171189072992939998568974355791872.000000
与C
中给出的结果完全相同。
我有预先存在的python和C ++文件,其中python文件定义了许多点,而C ++代码利用其现有库进行了所需的计算。最终产品是C ++代码写入的文件。我正在寻找一种在python中获取2000点列表的方法,将其传递给函数,然后执行所有C ++代码并输出我需要的文件。其他注意事项。这必须是可以在Linux或Windows机器上工作的东西,并且最少安装新插件…
如何锁定终端运行的perl,obj c,c++,python和ruby等脚本的源代码? - python我想出售我在perl,obj c,c ++,python,ruby,bash,php等中制作的脚本等它们都在终端中运行。 (Linux)如何锁定源代码,以便无需人们访问源代码即可分发我的脚本..?换句话说,如何将在Terminal中运行的程序的源代码锁定,以便人们可以使用该程序(如果该代码已下载到他们的Linux机器上,但他们无法访问实际的源代码)?例:ex…
如何用Cython保持C++类名不变? - c++我有一个名为Foo的C++类。如果遵循Cython C++ tutorial,则需要以其他方式调用Python类,例如PyFoo。但是我确实也需要调用Python类Foo。如何有效地做到这一点?编辑:我正在尝试接口以前与Boost Python接口的现有C++库。由于不同的原因,我想测试Cython。由于使用Boost:Python调用了Python类,因此…
在Java中,执行“ ++++++++”表达式,编译器未报告任何错误并且可以正确执行? - java我用eclipse编写了这段代码,用war写过,结果为3d。public static void main(String[] args) { double a = 5d + + + + + +-+3d; System.out.println(a); } 参考方案 您的表情可以改写为(5d) + (+ + + + +-+3d) 其中第一个+是应用于两个操作数的…
编写虚拟网络摄像头? - c++我需要创建一个虚拟的网络摄像头,该虚拟的网络摄像头冒充一个网络摄像头,但是将其播放的一组图像作为输入。我见过诸如ManyCam和Fake Webcam之类的解决方案,但它们似乎都在一个限制或另一个限制(分辨率,最大文件大小,fps等)上,我正在使用Windows XP SP3。我知道我必须为此任务编写WIA接口,但是作为Python程序员,我从未编写过驱动程…