为什么幂函数通常被计算为对数?

use*_*816 2 c++ math x86 assembly mathematical-optimization

我正在研究一些x86 ASM代码以及代码的真正功能,我的理解是power函数(x ^ y)在内部用作对数函数.在内部我指的是CPU寄存器.

为什么是这样?有什么好处?它是否可以被其他高级语言(如C++)复制和借用?

Kou*_*tty 6

你应该看看这个MATH,

答案是说,日志功能可以通过泰勒系列和查找表相结合来实现.如果有一个查找表,那么它可以被散列并且查找将比只能通过计算获得的pow更容易.

所以对于x y你可以把它写成

y = log<sub>10</sub> x . 
Run Code Online (Sandbox Code Playgroud)

要么

y = (ln x)/(ln 10);
Run Code Online (Sandbox Code Playgroud)

现在,如果没有pow的日志实现那么它应该通过Addition chain exponentiation Wiki来实现,这需要运行时计算,这可能需要比查找日志更长的时间.

编辑:感谢@harold取幂可以使用指数通过平方更优化地执行.


Der*_*rek 5

看看这个问题的答案:如何:x86中的pow(真实,真实)

回想一下你的对数规则:2的基数取消,log2(x)只留下x ^ y.

编辑:我们有一个x86指令来计算所需的每个组件.

  • 我相信该页面上接受的答案为"如何"和"为什么"提供了答案.计算2 ^(y*log2(x))是计算x ^ y的优雅且简单的方法.这是一种利用x86指令集的方法. (2认同)