稳健性是否支持2^3 =8这样的幂运算,还是应该执行多次乘法?我应该包括一个数学图书馆吗?我在官方医生身上什么都找不到。谢谢
发布于 2016-12-03 16:40:27
你只需要使用**。
下面的函数计算A为B的幂。
function power(uint256 A, uint256 B) public returns (uint256){
return A**B;
}发布于 2018-04-06 07:09:16
**是您要找的接线员。2**3 = 8。
但是在使用它的时候要有偏执--它很容易溢出。
例如..。在255到第二次幂的情况下.你可能想要的答案是65025。但是,如果使用uint8,那么实际得到的是65025 mod (2^8),或者,1。
例如:
uint8 a = 255;
uint8 b = 2;
uint8 c = a**b;结果c等于1。
甚至下面这些都对你没有好处。由于a和b都是uint8s,因此在转换为uint256之前,结果是具有mod 2^8“特性”的uint8。
uint256 d = a**b;再次,d等于1。
下面给出的答案是正确的,但只是因为a和b太小了。
uint256 e = uint256(a)**uint256(b);E等于65025。
确保你安全的复杂方法在这里..。
https://stackoverflow.com/questions/199333/how-to-detect-integer-overflow
一个简单的经验法则:如果你的数字是255或更少,到32或更少的幂,你应该是好的。
记住(a^b)^c等于a^(b*c)。
所以取最大的uint8,255..。
255^255
< 256^255
= (2^8)^255
= 2^(8x255)
= 2^(2040)这显然比“微小”uint256所能容纳的位数多(2^256-1).
255 ^ 32
< 256 ^ 32
= (2^8)^32
= 2^(8*32)
= 2^256
= one less than the maximum value of a uint256https://ethereum.stackexchange.com/questions/10475
复制相似问题