Solidity

可靠性有數學錯誤嗎?

  • November 10, 2022

我在可靠性方面遇到了一個舍入錯誤,我沒有在 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 contributionof 21756000000000000003,但應該是21756000000000000000。Python 正在為相同的公式返回正確的數字。使用定點數學庫獲得相同的錯誤數字

是的,根據 Python 存在數學錯誤。我已經在 Remix 中進行了測試並得到了21756000000000000003. 我在 Google 中進行了計算,得到的答案甚至與21756000000000000000. 精度取決於您的要求是否可以接受。

是的,Solidity 中有多個原生數學錯誤,但它們在技術上稱為恐慌

ForgeStd 有一個名為stdError. 與您最相關的程式碼是:

  • arithmeticError(溢出 2^256)
  • divisionError(除以零)

引用自:https://ethereum.stackexchange.com/questions/139099