我正在处理一个运算无符号256位整数的算法,我需要编写一个计算给定公式值的函数
uint256 compute(uint16 x) {
return floor(exp2(x / 256)) - 1;
}
我们可以看到等式保留了变量边界(compute(0) == 0
,compute(65535) == 1<<255
)。该划分应被视为有理数的划分,而不是整数。
所提出的语法是伪C,但我正在寻找可用于其他语言的通用算法方法。
非常感谢你的帮助和时间。
答案 0 :(得分:5)
您可以预先计算并列出x
中[65280, 65535]
的{{1}}函数的所有256位值(即255 x 256 + i
);您将通过参数的8个最低有效位查找表。这需要8KB的存储空间。
对于较低的参数值,请将列表值右移255 - (x >> 8)
。
如果您想要纯粹的速度并且能够承受64KB的存储空间,您可以预先计算0到7的移位,并通过使用正确的字节偏移量进行更大的移位。
或者,您可以考虑指数的CORDIC方法,但我认为它不会更快或需要更少的存储空间。