ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 06:15

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年6月12日(日) 23:26 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
function.sbpではHIWORD, HIBYTE, MAKELONG, MAKEWORDでは割り算・掛け算が使われていますが,これをビットシフトにすれば高速化できると思います。
あと,これらは簡単な内容なのでConst定義にしてもよいかと思います。

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年6月12日(日) 23:50 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
そうですね。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)


通報する
ページトップ
投稿記事Posted: 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) )


通報する
ページトップ
   
投稿記事Posted: 2005年6月20日(月) 19:13 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
> 実際、これで #defineと同様の問題が起こっています。
ABのConst関数はC++のinline関数のようなものなので問題ないと思います。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 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


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[12人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean