[英]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.