確かbasic/function.sbp内の関数powの仕様の関係でDouble型を返すことになってたはずです。(コンパイラ側の仕様で必ず内包される関数のひとつの筈。)
グローバル領域でのオーバーロードができれば対処できるかもしれません。
どちらにしても4.24だと無理だった気がするんですが。
具体的には を定義(オーバーロード)する必要があるわけです。
直接書き換えるとDouble型の演算がうまくいかなくなると思うのでやめておいてください。
#Fixとかは組み込むのにこいつを組み込まないのはどうしてなんでしょうねぇ・・・。
追記:山本さんが機械語を読まないのを思い出したので、組み込み用のバイナリとか作ってみました。 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]どうみても暇なだけです。
55 8B EC 53 56 8B 4D 0C B8 01 00 00 00 8B 5D 08
F7 C1 01 00 00 00 74 02 F7 EB 8B F0 8B C3 F7 E8
8B D8 8B C6 D1 E9 75 E8 5E 5B C9 C2 08 00
(46byte,呼び出し:stdcall,引数:上のコードと同一) source code [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: pow proc x:dword,n:dword
push ebx
push esi
;ret=r=eax
;n=ecx
;x=ebx
mov ecx,n
mov eax,1
mov ebx,x
_l1:
test ecx,1
jz _l2
imul ebx
_l2:
mov esi,eax
mov eax,ebx
imul eax
mov ebx,eax
mov eax,esi
shr ecx,1
jnz _l1
pop esi
pop ebx
ret
pow endp
確かbasic/function.sbp内の関数powの仕様の関係でDouble型を返すことになってたはずです。(コンパイラ側の仕様で必ず内包される関数のひとつの筈。) グローバル領域でのオーバーロードができれば対処できるかもしれません。 どちらにしても4.24だと無理だった気がするんですが。
具体的には[hide=こんな奴][code]Function pow(x As Long, n As DWord) As Long Dim r As Long
r=1 While n If n and 1 Then r=r*x x=x*x n=n>>1 Wend
pow=r End Function[/code][/hide]を定義(オーバーロード)する必要があるわけです。 直接書き換えるとDouble型の演算がうまくいかなくなると思うのでやめておいてください。
#Fixとかは組み込むのにこいつを組み込まないのはどうしてなんでしょうねぇ・・・。 [hide=追記:山本さんが機械語を読まないのを思い出したので、組み込み用のバイナリとか作ってみました。]どうみても暇なだけです。 55 8B EC 53 56 8B 4D 0C B8 01 00 00 00 8B 5D 08 F7 C1 01 00 00 00 74 02 F7 EB 8B F0 8B C3 F7 E8 8B D8 8B C6 D1 E9 75 E8 5E 5B C9 C2 08 00 (46byte,呼び出し:stdcall,引数:上のコードと同一)[hide=source code][code]pow proc x:dword,n:dword push ebx push esi ;ret=r=eax ;n=ecx ;x=ebx mov ecx,n mov eax,1 mov ebx,x _l1: test ecx,1 jz _l2 imul ebx _l2: mov esi,eax mov eax,ebx imul eax mov ebx,eax mov eax,esi shr ecx,1 jnz _l1 pop esi pop ebx ret pow endp[/code][/hide][/hide]
|