0

このコードは、0 から 4095 までの数値の sqrt() をテーブルに格納するもので、これを Actionscript 3 に変換したいと考えています。

unsigned short int_sqrt_x1024[4096];

for (int i=0; i<sizeof(int_sqrt_x1024)/sizeof(int_sqrt_x1024[0]); i++)
int_sqrt_x1024[i] = (int)(sqrtf((float)i + 0.5f) * 1024.0f);

私はそれを途中でやりましたが、「sizeof」パーツは私を手に入れました。

あなたの提案に基づいて、私はこれを思いつきました。どう思いますか???:

var int_sqrt_x1024:Vector.<uint> =  new Vector.<uint>(4096,true)
for (var i:int = 0; i < int_sqrt_x1024.length; i++)
int_sqrt_x1024[i] = Math.sqrt( i + 0.5) * 1024;
4

2 に答える 2

1

申し訳ありませんが、私は Actionscript を知らないので翻訳を提供できませんが、これも役立つと思います:

C sizeof-Operator は、引数のサイズをバイト単位で返します。これは、Actionscript のような「管理された」言語では気にする必要はありません。あなたが投稿したCコード(必ずしもC++にするものは何も見当たりません)が行うことは、ループ(size_of_the_array_in_bytes/ size_of_one_array_element_in_bytes)回を反復することです。あなたの場合、その複雑な式は単純に 4096 に評価されます。

別の世界では、平方根のストアを 4096 回実行するループを作成します。


あなたがベースとして使用している C コードは、かなり貧弱に書かれているようです。単純なルックアップ テーブルを埋めるために、このような複雑で冗長で読みにくい方法を使用する理由が見つからないようです。IMO、次のようになります。

#define LOOKUPTABLE_LENGTH 4096
unsigned short int_sqrt_x1024[LOOKUPTABLE_LENGTH];

for (int i=0; i<LOOKUPTABLE_LENGTH; i++)
    int_sqrt_x1024[i] = (int)(sqrtf((float)i + 0.5f) * 1024.0f);

はるかに読みやすいですよね?

于 2012-06-19T23:16:50.170 に答える
1

sizeof HEREの定義を見つけることができます。私の知る限り、AS3 には類似の演算子はありません。ドキュメントでそのようなものに遭遇したことはなく、検索しても何もわかりません。

実際、私が見つけることができる最も近いものは、完全に無関係なByteArrayです。一方は高度なデータ型であり、もう一方は演算子であるため、同じ目的を達成しないことを保証できます。それらの使用法は似ていません。

このコードの目的は何ですか? おそらく、同じ目的を達成する別の方法があります。(そして、どうやらコメントを読むと、実際にはもっと良い方法があります。)

編集:以下のBasicのコメントを参照してください...似たようなものがあるかもしれません。

于 2012-06-19T23:11:01.897 に答える