使用泰勒展开式的 sin(x) 汇编代码
在 x86 Linux 中,如何使用 Taylor Expansion 在汇编代码中实现 sin(x)
?
In x86 Linux, how can I implement sin(x)
in assembly code using Taylor Expansion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你没有说明是哪种CPU架构,所以我假设是x86。
最简单(也可能是最低效)的方法是在 RPN 中编写公式,它几乎可以直接映射到 FPU 指令。
示例,
代数公式: x - (x^3/3!) + (x^5/5!)
RPN : xxx * x * 3 2 * / - xx * x * x * x * 5 4 * 3 * 2 * / +
变成:
有一些明显的优化策略 -
xxxxx 等对于每个术语,存储
“运行产品”并相乘
每次 x*x
计算每个的阶乘
术语,做同样的“运行产品”
这里是x86 FPU的一些注释代码,每个FPU指令后面的注释显示该指令执行后的堆栈状态,堆栈顶部(st0)位于左侧,例如:
--snip- -
运行程序:
You don't state which CPU architecture so I'm assuming x86.
The simplist (and possibly most inefficient) way would be to write the formula in RPN, which can be mapped almost directly to FPU instructions.
Example,
algebraic formula : x - (x^3/3!) + (x^5/5!)
RPN : x x x * x * 3 2 * / - x x * x * x * x * 5 4 * 3 * 2 * / +
which becomes :
There are some obvious optimisation strategies -
xxxxx etc for each term, store a
'running product' and just multiply
by x*x each time
calculating the factorial for each
term, do the same 'running product'
Here's some commented code for x86 FPU, the comments after each FPU instruction show the stack state after that instruction has executed, with the stack top (st0) on the left, eg :
--snip--
running the program :
为什么? 自 80387(大约 1987 年)处理器源以来,已经存在 FCOS 和 FSIN 操作码
:
http://ref.x86asm .net/coder32.html
维基百科
演示场景中的个人朋友
Why? There is already a FCOS and FSIN opcode since the 80387 (circa 1987) processor
source:
http://ref.x86asm.net/coder32.html
Wikipedia
Personal friend from demo scene