HIWORD等で使われている割り算・掛け算

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: HIWORD等で使われている割り算・掛け算

by xsb007 » 2005年6月24日(金) 20:47

ver. 4.01.02において、以下のコードを実行してみると、確かに、#define同等の結果となります。ご確認ください。

コード: 全て選択


#N88BASIC

Const abc(x) = x * (x-1) * 50
Const xyz(x) = x * 50


print abc(2+1)  'x * (x-1) * 50 : 2+1 * (2+1-1) * 50
                               '= 2+ (2+1-1) * 50
                               '= 2+ 2 * 50
                               '= 102 となってしまいます。
                               ' ご確認ください。

print abc(3)    'x * (x-1) * 50 : 3 * (3-1) * 50
                               '= 3 * 2 * 50
                               '= 300


print

print xyz(4)    ' x * 50 : 4 * 50
                        '= 200
                        
print xyz(3+1)  ' 3+1 * 50 : 3 + 50
                          '= 53

Re: マクロ関数の()について

by イグトランス » 2005年6月20日(月) 19:13

> 実際、これで #defineと同様の問題が起こっています。
ABのConst関数はC++のinline関数のようなものなので問題ないと思います。

マクロ関数の()について

by xsb007 » 2005年6月19日(日) 22:48

Constによるマクロ関数は、()でくくらないとまずいんじゃないかと。
実際、これで #defineと同様の問題が起こっています。
または BASIC なんだから、自動で()をつけて文字列の置き換えを行うか。

コード: 全て選択

Const HIBYTE(w) = ( ( (w) >> 8) and &HFF )
Const LOBYTE(w) = ( (w) and &HFF)
Const HIWORD(dw) = ( ( (dw) >> 16) and &HFFFF)
Const LOWORD(dw) = ( (dw) and &HFFFF )

Const MAKEWORD(a,b) = ( ((a) and &HFF) or (((b) and &HFF)<<8) )
Const MAKELONG(a,b) = ( ((a) and &HFFFF) or (((b) and &HFFFF)<<16) )

by 山本 » 2005年6月12日(日) 23:50

そうですね。Const定義にしたほうが処理速度が速くなるので、早速次回のバージョンアップで改良しようと思います。

因みに、修正後のコードは下のようなものになります(function.sbpの一部分)。

コード: 全て選択

Const HIBYTE(w) = (w >> 8) and &HFF
Const LOBYTE(w) = w and &HFF
Const HIWORD(dw) = (dw >> 16) and &HFFFF
Const LOWORD(dw) = dw and &HFFFF

Const MAKEWORD(a,b) = (a and &HFF) or ((b and &HFF)<<8)
Const MAKELONG(a,b) = (a and &HFFFF) or ((b and &HFFFF)<<16)

HIWORD等で使われている割り算・掛け算

by Sinryow » 2005年6月12日(日) 23:26

function.sbpではHIWORD, HIBYTE, MAKELONG, MAKEWORDでは割り算・掛け算が使われていますが,これをビットシフトにすれば高速化できると思います。
あと,これらは簡単な内容なのでConst定義にしてもよいかと思います。

ページトップ