以下伪代码将如何转换为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
中的随机数生成器答案 0 :(得分:2)
逐行,以下是更改:
function IntNoise(32-bit integer: x)
我们不需要声明参数类型,也不想使用CamelCase,所以第一行是:
def intnoise(x):
下一行唯一的问题是分号。删除它,我们得到:
x = (x << 13) ^ x
x将向左移位 13位,然后结果将按位异或 - -ed与x的起始值。
在下一行,再次没有分号,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 :(得分:1)
除非使用numpy.int32
,否则“32位整数”部分不会。只需将值掩盖为32位即可。
“&lt;&lt;&lt;代表。
“&amp; 7fffffff”需要转换。 “&amp;”但是,十六进制文字需要一点:0x7fffffff
。
答案 2 :(得分:1)
作为一项学习练习 - 很棒,但是一旦你理解了它,只需使用os.urandom(4)
作为随机数,或random
中的函数用于各种伪随机生成器。
答案 3 :(得分:0)
从我的代码中我理解的是,函数IntNoise
将32-bit integer
作为输入。 <<
是我所知道的左移算子。它将数字的位向左移动了13次。 ^
是指数级的。 7fffffff
必须是十六进制格式的数字。它是8位数字,每个数字,即f和7取4位。 f
是十六进制中15
的值。