簡體   English   中英

python十進制給出錯誤的答案

[英]python decimal gives wrong answers

這是你可以在解釋器中嘗試的東西,誰能解釋我為什么? 注意:這個問題不同於浮點數學是否被破壞? 因為我的答案不是有點偏離,而是偏離,我的問題是關於十進制,而不是關於內置浮點數。

from decimal import getcontext, Decimal
a = Decimal(".110001"+"0"*17+"1"+"0"*95+"1"+"0"*599+"1"+"0"*4319+"1")
b = Decimal(".220002"+"0"*17+"2"+"0"*95+"2"+"0"*599+"2"+"0"*4319+"2")
b-a == a # Returns False while it should be True
b-a-a # Returns Decimal('-1.000000000000000000000000000E-120')

默認Decimal精度為 28 位小數,因此您正在丟失數據, b - a0.1100010000000000000000010000 您可以使用getcontext().prec設置它

a = Decimal(".110001" + "0" * 17 + "1" + "0" * 95 + "1" + "0" * 599 + "1" + "0" * 4319 + "1")
b = Decimal(".220002" + "0" * 17 + "2" + "0" * 95 + "2" + "0" * 599 + "2" + "0" * 4319 + "2")
getcontext().prec = max(len(str(a)), len(str(a)))
print(b-a == a) # True

暫無
暫無

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

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