簡體   English   中英

C ++與Python精度

[英]C++ vs Python precision

嘗試找到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;

蟒蛇

(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解決方案???

Decimal是一個內置的python類,可以正確處理浮點數(作為基數10,而不是IEEE 7somethingsomething標准)。 我不知道它是否支持對數和所有這些。

編輯:它確實支持對數“和所有”。

您也可以設置它的精度。 默認值是28個位置,但它可以是您想要的大小。 可以將其視為小數的BigInt。

正如你所發現的那樣,Python浮動是引擎蓋下的雙打。 您將不得不求助於C代碼或外部庫,以獲得更好的浮點精度。

GMP庫是一個很好的庫,它有一個名為'GMPY'的python包裝器,在PyPI上可用

一般來說,我會這樣做。 但是,對於您的示例數字,它似乎沒有足夠快的速度執行。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM