1
爲了找到在一定基數的數字的位數,我試圖寫該行:掌握日誌的地板上舍入誤差在Python
numdigits = math.floor(math.log(num, base)) + 1
其中math.log(num, base)
相當於math.log(num)/math.log(base)
但是,在這兩種情況下,這有時會得到錯誤的位數。這是因爲math.log的答案是浮點數,因此精度有限。例如,計算的3486784401(3^20)底數3時:
>>> math.log(3486784401, 3)
19.999999999999996
趁着這個地板將給予19,而正確答案是20。我明白,這是因爲道路浮點數字以二進制表示,但我想知道是否有解決此問題的方法。
有沒有一種方法可以寫出一個函數,以100%的精度給出任何基底的對數底線?
您可以使用'sympy.log'進行精確計算。 –
@YakymPirozhenko謝謝!你知道這是如何工作的嗎?它的速度有多快? – Yaxlat