我有一个应用程序需要将一个数字提升到一个分数幂。目标平台是一个FPGA,我可以得到它的FPU大小的估计,但我需要一个算法,只是为了可行性研究将数字提高到一个分数功率。我假设浮动点是最坏的情况,我希望在实践中我们能够使用捷径,但是现在我想表明我们可以实施最坏的情况。
以为我会问这里,看看是否有任何常见的方法可以结账。我知道有这样做的软件方法,我想要一个合理有效的算法开始。我会担心FPGA的实现。
答案 0 :(得分:7)
您的输入范围是任意的,还是在一定范围内已知?
在任何一种情况下,x m = exp(m log x),所以如果你可以创建函数来评估exp(x)和log(x)并且有一个乘法,你可能搞定。
您必须弄清楚如何处理x的非正值。
(提示log(x):如果这是IEEE-754 floating point,则根据需要移位有效数字,直到最终得到2 k 和2 k之间的数字范围+1 表示某个值K.这可以让你处理2:1的范围,这个范围不太难以用多项式逼近。那么你只需要少量的可能来处理指数和转移数
exp(x)的对应提示:写x = k + b其中0 <= b
(提示#2:对于x m = g(mf(x)),数字可能更好,其中f(x)= log 2 x和g (x)= 2 x 。)
答案 1 :(得分:5)
正如Jason S所说,这是使用身份x m = exp(m log x)完成的。但实际上,您必须处理截断错误。 我认为通常这样做的方式是