簡體   English   中英

測量浮點精度得到N個小數位

[英]Measuring the accuracy of floating point results to N decimal places

我正在測試python(64位操作系統)中Pi的一些實現,並且我有興趣測量答案的准確度(多少小數位是正確的?)以增加迭代次數。 我不希望比較超過15個小數位,因為除此之外,浮點表示本身是不准確的。

例如,對於低迭代計數,我得到的答案是

>>> x
3.140638056205993

我希望與math.pi進行比較

>>> math.pi
3.141592653589793

對於上面我希望我的答案是3(小數點后3位錯誤)我做的方式是:

>>> p = str('%.51f' % math.pi)
>>> q = str('%.51f' % x)
>>> for i,(a,b) in enumerate(zip(p,q)):
...     if a != b:
...         break

上面看起來很笨拙,即將浮點數轉換為字符串,然后逐個字符地進行比較,是否有更好的方法可以做到這一點,比如更多Pythonic或者使用原始浮動值本身?

順便說一下,我發現math.frexp,這可以用來做到這一點嗎?

>>> math.frexp(x)
(0.7851595140514982, 2)

您可以計算兩者之間差異的對數

>>> val = 3.140638056205993
>>> epsilon = abs(val - math.pi)
>>> abs(int(math.log(epsilon, 10))) + 1
3

從本質上講,你要找出等於兩個數字之間差異所需的10的冪。 僅當兩個數字之間的差異小於1時才有效。

暫無
暫無

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

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