Solidity 对于数学公式的支持比较弱, 对于整型,仅支持:
因此在 Solidity文档 里找不到对应的API。
如果可以使用以下代码实现:
pragma solidity ^0.4.18;
contract MathSqrt {
function sqrt(uint x) public pure returns(uint) {
uint z = (x + 1 ) / 2;
uint y = x;
while(z < y){
y = z;
z = ( x / z + z ) / 2;
}
return y;
}
}
这个计算会向下取整,即: 5的平方根是2。
如果需要严格求平方根,可以加一个判断:
uint b = sqrt(a);
require(b * b == a, "无效平方根");