C ++与Python精度

时间:2010-10-02 16:45:38

标签: c++ python floating-point precision floating-accuracy

尝试找到num ^ num的前k个数字的问题我用C ++和Python编写了相同的程序

C ++

long double intpart,num,f_digit,k;
cin>>num>>k;
f_digit= pow(10.0,modf(num*log10(num),&intpart)+k-1);
cout<<f_digit;

的Python

(a,b) = modf(num*log10(num))
f_digits = pow(10,b+k-1)
print f_digits

输入

19423474 9

输出

C++    > 163074912
Python > 163074908

我检查了结果C ++解决方案是准确的。 请查看http://www.wolframalpha.com/input/?i=19423474^19423474

任何想法如何在Python中获得相同的精度?

编辑:我知道外部库包以获得这种精度但任何NATIVE解决方案???

3 个答案:

答案 0 :(得分:9)

Decimal是一个内置的python类,可以正确处理浮点数(作为基数10,而不是IEEE 7somethingsomething标准)。我不知道它是否支持对数和所有这些。

编辑:确实support logarithms "and all that".

您也可以设置它的精度。默认值是28个位置,但它可以是您想要的大小。可以把它想象成小数的BigInt。

答案 1 :(得分:2)

正如您所发现的那样,Python浮动是引擎盖下的双打。您将不得不求助于C代码或外部库,以获得更好的浮点精度。

GMP库是一个很好的库,它有一个名为'GMPY'的python包装器,可在PyPI上找到

答案 2 :(得分:0)

一般来说,我会这样做。但是,对于您的示例数字,它似乎没有足够快的速度执行。

num = 453
k = 9
result = num ** num

print str(result)[:k]
# Prints: '163111849'