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。_

该函数是来自此网页的随机数生成器: Perlin Noise

4

4 回答 4

3

逐行,以下是更改:

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

    我们不需要声明参数类型,也不想使用 CamelCase,所以第一行是:

    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”需要转换。“&”代表,但十六进制文字需要一点:0x7fffffff

于 2012-07-21T20:18:59.550 回答
1

作为一个学习练习——很好,但是一旦你理解了它,就可以使用os.urandom(4)随机数,或者random用于各种伪随机生成器的函数。

于 2012-07-21T20:31:51.287 回答
0

从您的代码中,我确实理解的是,该函数IntNoise作为32-bit integer输入。据我所知,这<<是左移运算符。并将数字的位向左移动 13 次。^是指数的。并且7fffffff必须是一个以十六进制格式表示的数字。它是 8 位数字,每个数字即 f 和 7 占用 4 位。f15十六进制的值。

于 2012-07-21T20:20:38.737 回答