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