C++与Python的精度比较

9 投票
3 回答
4834 浏览
提问于 2025-04-16 04:53

我在尝试解决一个问题,想找出一个数字的数字次方的前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中得到同样的精度呢???

补充:我知道有一些外部库可以实现这种精度,但有没有什么原生的解决方案呢??

3 个回答

0

一般来说,我会这样做。不过,看起来这个方法的速度远远达不到你给出的例子中的要求。

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

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

你发现了,Python中的浮点数其实在内部是双精度的。要想获得更高的浮点数精度,你可能需要使用C语言代码或者一个外部库。

GMP库是一个不错的选择,它有一个叫做'GMPY'的Python封装,可以在PyPI上找到。

11

Decimal 是 Python 内置的一个类,用来正确处理浮点数(也就是十进制的,而不是某种复杂的标准)。不过我不太确定它是否支持对数和其他相关的功能。

补充一下:它确实 支持对数“和其他相关功能”。

你还可以设置它的精度。默认情况下是 28 位小数,但你可以根据需要设置得更大。可以把它想象成是处理小数的 BigInt。

撰写回答