Algorithm 如何计算任意幂/根?

Algorithm 如何计算任意幂/根?,algorithm,math,floating-point,exponent,Algorithm,Math,Floating Point,Exponent,我有一个应用程序,它需要将一个数字提升到分数次方。目标平台是一个FPGA,我可以估计它的FPU大小,但我需要一个算法,将数字提高到分数次方,只是为了进行可行性研究。我假设浮点是最坏的情况,我希望在实践中我们能够使用捷径,但现在我想表明最坏的情况可以在我们这方面实现 我想我会在这里问一下,看看有没有什么常用的方法可以让我检查一下。我知道有软件方法可以做到这一点,我只想从一个合理有效的算法开始。我会担心FPGA的实现。您的输入范围是任意的,还是在某个范围内已知的 在这两种情况下,xm=exp(m l

我有一个应用程序,它需要将一个数字提升到分数次方。目标平台是一个FPGA,我可以估计它的FPU大小,但我需要一个算法,将数字提高到分数次方,只是为了进行可行性研究。我假设浮点是最坏的情况,我希望在实践中我们能够使用捷径,但现在我想表明最坏的情况可以在我们这方面实现


我想我会在这里问一下,看看有没有什么常用的方法可以让我检查一下。我知道有软件方法可以做到这一点,我只想从一个合理有效的算法开始。我会担心FPGA的实现。

您的输入范围是任意的,还是在某个范围内已知的

在这两种情况下,xm=exp(m log x),因此如果您可以创建函数来计算exp(x)和log(x)并进行乘法运算,那么您可能已经全部设置好了

您必须弄清楚如何处理x的非正值

(log(x)提示:如果是这样,则在必要时移动有效位,直到某个值K的数字范围在2k和2k+1之间。这使您可以处理2:1的范围,该范围不太难用多项式近似。然后,您只需要处理指数和移位数的少量可能性


exp(x)的相应提示:写入x=k+b,其中0,正如Jason S所说,这是使用标识xm=exp(m log x)完成的。但实际上,您必须处理截断错误。 我认为通常的做法是


  • 使用此标识:xm=(2n*x/2n)m=2nm*(x/2n)m,然后找到一个整数n,这样1我现在假设为任意的,我必须阅读更多的计算背后的系统理论。现在我们只是试图向客户提出一个解决方案。我只是想通过分析证明它可以在我们的系统上完成。+1。我前阵子在一个奇怪的运行时上工作,缺少完整的FP库,但提供了frexp/ldexp例程来分离和重新组合指数和尾数;因此,构建标准FP函数相当简单。实际上,特别是在一种情况下,指数将大于1。我不确定这是否适用于所有情况。您如何确切地使用newton raphson来计算log函数?我可以用它找到除数算法,但是google上有太多的“噪音”无法找到如何使用它计算日志。我想我从我的计算理论中记得这是可能的,但我可能错了。我不是数学家。你也可以用它来计算任何函数——它基本上是f(x)的数值解算器=0,给定一对起始点x1、x2,并保证解介于两者之间。