algorithm - 如何计算任意幂/根?

标签 algorithm math floating-point exponent

我有一个应用程序需要计算一个数的分数次方。目标平台是一个 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/

相关文章:

floating-point - 为什么使用==时tcl中的1.0不等于1.0

floating-point - 取对数并加或乘

algorithm - 添加新点时如何避免重复线性回归过程

java - 为什么面额数组的排序在硬币找零中很重要

java - Java 中的优先级队列,它跟踪每个节点的位置

java - 对双数取模

python - 如何使用sympy找到生成函数的第n项?

javascript - 如何使我的输出全部显示在一行中且没有空格?

android - 如何检查除法的结果是int还是float

c++ - 定点数的动态格式化