Solidity
可靠性有數學錯誤嗎?
我在可靠性方面遇到了一個舍入錯誤,我沒有在 python 中獲得
uint contributor_balance = 51.50350 ether; uint principal = 21.756 ether; uint WAD = 1000000000000000000; uint percent_used = contributor_balance * WAD / principal; uint contribution = contributor_balance * WAD / percent_used; return contribution;
這是返回 a
contribution
of21756000000000000003
,但應該是21756000000000000000
。Python 正在為相同的公式返回正確的數字。使用定點數學庫獲得相同的錯誤數字
是的,根據 Python 存在數學錯誤。我已經在 Remix 中進行了測試並得到了
21756000000000000003
. 我在 Google 中進行了計算,得到的答案甚至與21756000000000000000
. 精度取決於您的要求是否可以接受。
是的,Solidity 中有多個原生數學錯誤,但它們在技術上稱為恐慌。
ForgeStd 有一個名為
stdError
. 與您最相關的程式碼是:
arithmeticError
(溢出 2^256)divisionError
(除以零)