pow(real, real)
x86アセンブリでの実装を探しています。また、アルゴリズムがどのように機能するかを理解したいと思います。
27609 次
3 に答える
67
として計算するだけ2^(y*log2(x))
です。
y*log2(x) を計算する x86 命令 FYL2X と、累乗を行う x86 命令 F2XM1 があります。F2XM1 は [-1,1] の範囲の引数を必要とするため、整数部分と剰余を抽出し、剰余を累乗し、FSCALE を使用して適切な 2 の累乗で結果をスケーリングするために、間にコードを追加する必要があります。
于 2011-01-09T09:26:48.657 に答える
16
OK、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
于 2011-01-09T18:18:59.567 に答える