伪代码解释

时间:2012-07-21 20:11:53

标签: python pseudocode

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

我不确定以下项目:IntNoise调用中的'32位整数:x'参数; '&lt;&lt;&lt;'和'&amp; 7fffffff'

该功能是此网页http://freespace.virgin.net/hugo.elias/models/m_perlin.htm

中的随机数生成器

4 个答案:

答案 0 :(得分:2)

逐行,以下是更改:

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

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

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

    x = (x << 13) ^ x
    

    x将向左移位 13位,然后结果将按位异或 - -ed与x的起始值。

  3. 在下一行,再次没有分号,7ffffff需要以0x为前缀,因此:

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

  4. 总而言之,这使得:

    def intnoise(x):
        x = (x << 13) ^ x
        return (1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0)
    

答案 1 :(得分:1)

除非使用numpy.int32,否则“32位整数”部分不会。只需将值掩盖为32位即可。

“&lt;&lt;&lt;代表。

“&amp; 7fffffff”需要转换。 “&amp;”但是,十六进制文字需要一点:0x7fffffff

答案 2 :(得分:1)

作为一项学习练习 - 很棒,但是一旦你理解了它,只需使用os.urandom(4)作为随机数,或random中的函数用于各种伪随机生成器。

答案 3 :(得分:0)

从我的代码中我理解的是,函数IntNoise32-bit integer作为输入。 <<是我所知道的左移算子。它将数字的位向左移动了13次。 ^是指数级的。 7fffffff必须是十六进制格式的数字。它是8位数字,每个数字,即f和7取4位。 f是十六进制中15的值。