我有一个应用程序需要计算一个数的分数次方。目标平台是一个 FPGA,我可以估计它的 FPU 大小,但我需要一个算法来将数字提高到分数次幂,只是为了进行可行性研究。我假设 float 是最坏的情况,我希望在实践中我们能够使用捷径,但现在我想证明我们可以实现最坏的情况。
我想在这里问一下,看看是否有任何我可以检查的常用方法。我知道有一些软件方法可以做到这一点,我只想从一个相当有效的算法开始。我会担心 FPGA 实现。
最佳答案
您的输入范围是任意的,还是在某个范围内已知?
在任何一种情况下,xm = exp(m log x),因此如果您可以创建函数来计算 exp(x) 和 log(x) 并进行乘法运算,您可能可以了,好了。
您必须弄清楚要如何处理 x 的非正值。
(对 log(x) 的提示:如果这是 IEEE-754 floating point,必要时移动尾数,直到得到 2k 和 2k+1 之间的数字范围 对于某个值 K。这使您可以处理 2:1 的范围,这不太难用多项式来近似。然后您只有少量的可能性来处理指数和移位数。
exp(x) 的相应提示:写 x = k+b 其中 0 <= b < 1 并且 k 是一个整数。然后 exp(x) = exp(k)*exp(b); b 的范围有限,k 的离散可能性也有限。)
(提示 #2:对于 xm = g(m f(x)),这些数字可能会更好,其中 f(x) = log2x 和 g (x) = 2x。)
关于algorithm - 如何计算任意幂/根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1375953/