C:超过256位整数的指数

时间:2015-06-14 18:43:43

标签: c precision arbitrary-precision exponentiation

我正在处理一个运算无符号256位整数的算法,我需要编写一个计算给定公式值的函数

uint256 compute(uint16 x) {
    return floor(exp2(x / 256)) - 1;
}

我们可以看到等式保留了变量边界(compute(0) == 0compute(65535) == 1<<255)。该划分应被视为有理数的划分,而不是整数。

所提出的语法是伪C,但我正在寻找可用于其他语言的通用算法方法。

非常感谢你的帮助和时间。

1 个答案:

答案 0 :(得分:5)

您可以预先计算并列出x[65280, 65535]的{​​{1}}函数的所有256位值(即255 x 256 + i);您将通过参数的8个最低有效位查找表。这需要8KB的存储空间。

对于较低的参数值,请将列表值右移255 - (x >> 8)

如果您想要纯粹的速度并且能够承受64KB的存储空间,您可以预先计算0到7的移位,并通过使用正确的字节偏移量进行更大的移位。

或者,您可以考虑指数的CORDIC方法,但我认为它不会更快或需要更少的存储空间。