伪代码解释

问题描述 投票:1回答:4

以下伪代码如何转换成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

python pseudocode
4个回答
2
投票

逐行,这是更改:

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

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

    def intnoise(x):
    
  2. 下一行唯一的问题是分号。删除它,我们得到:

    x = (x << 13) ^ x
    

    x将向左移动 13位,然后将结果按x的起始值按位exclusive-OR-ed。

  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)

1
投票

“ 32位整数”部分没有,除非您使用numpy.int32。只要有意义,就将值屏蔽为32位。

“ <

“&7fffffff”需要进行转换。 “&”代表,但十六进制文字需要一点点:0x7fffffff


1
投票

作为一项学习练习-很好,但是一旦您了解它,只需对随机数使用os.urandom(4),对各种伪随机数发生器使用random中的函数。


0
投票

从您的代码中我真正理解的是,函数IntNoise32-bit integer作为输入。 <<是我所知的左移运算符。并将数字的位左移13次。 ^是指数的。并且7fffffff必须是十六进制表示形式的数字。它是8位数字,每个数字,即f和7占用4位。 f15的十六进制值。

© www.soinside.com 2019 - 2024. All rights reserved.