2

次の擬似コードはどのようにPythonに変換されますか?

function IntNoise(32-bit integer: x)             

    x = (x<<13) ^ x;
    return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);    

end IntNoise function  

次の項目についてはよくわかりません。呼び出しの32-bit integer: x引数; IntNoise<<および&7fffffff

この関数は、次のWebページの乱数ジェネレーターです: PerlinNoise

4

4 に答える 4

3

行ごとに、変更点は次のとおりです。

  1. function IntNoise(32-bit integer: x)

    引数の型を宣言する必要はなく、CamelCaseを使用したくないので、1行目は次のようになります。

    def intnoise(x):
    
  2. 次の行の唯一の問題はセミコロンです。それを削除すると、次のようになります。

    x = (x << 13) ^ x
    

    xは13ビット左にシフトされ、結果はビット単位の排他的論理和(xの開始値との論理和)になります。

  3. 次の行では、ここでもセミコロンはなく、7ffffffプレフィックスを付ける必要があります0x。したがって、次のようになります。

    return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0)
    

全体として、これは次のようになります。

def intnoise(x):
    x = (x << 13) ^ x
    return (1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0)
于 2012-07-21T20:32:08.760 に答える
1

「32ビット整数」の部分は、を使用しない限り、そうではありませんnumpy.int32。意味がある場合は、値を32ビットにマスクするだけです。

「<<」は立っています。

「&7fffffff」は変換する必要があります。「&」は意味しますが、16進リテラルには少し必要です:0x7fffffff

于 2012-07-21T20:18:59.550 に答える
1

学習演習として-すばらしいですが、理解したら、os.urandom(4)乱数、またはrandomさまざまな疑似乱数ジェネレーターの関数を使用してください。

于 2012-07-21T20:31:51.287 に答える
0

私が理解したあなたのコードから、関数IntNoise32-bit integer入力として受け取ります。これ<<は私が知っていることからの左シフト演算子です。数値のビットを13回左にシフトします。^指数関数的です。また7fffffff、16進形式の数値である必要があります。これは8桁の数字で、すべての桁、つまりfと7は4ビットを取ります。は16進数fの値です。15

于 2012-07-21T20:20:38.737 に答える