Eug*_*ith 64
只需将其计算为2^(y*log2(x)).
有一个x86指令FYL2X来计算y*log2(x)和一个x86指令F2XM1来进行求幂.F2XM1需要[-1,1]范围内的参数,因此您必须在两者之间添加一些代码以提取整数部分和余数,对余数进行取幂,使用FSCALE以适当的2的幂来缩放结果.
Mac*_*rko 16
好的,我power(double a, double b, double * result);按照你的建议在x86中实现了.
代码:http://pastebin.com/VWfE9CZT
%define a QWORD [ebp+8]
%define b QWORD [ebp+16]
%define result DWORD [ebp+24]
%define ctrlWord WORD [ebp-2]
%define tmp DWORD [ebp-6]
segment .text
global power
power:
push ebp
mov ebp, esp
sub esp, 6
push ebx
fstcw ctrlWord
or ctrlWord, 110000000000b
fldcw ctrlWord
fld b
fld a
fyl2x
fist tmp
fild tmp
fsub
f2xm1
fld1
fadd
fild tmp
fxch
fscale
mov ebx, result
fst QWORD [ebx]
pop ebx
mov esp, ebp
pop ebp
ret
Run Code Online (Sandbox Code Playgroud)