生成介于-1和1之间的随机数?

时间:2015-02-23 21:04:02

标签: java random simplex

所以我发现这个有用的网站有很多代码和解释perlin和单纯形噪声。但是,代码是用不同的语言编写的。我能够为java重写大部分内容,但是有一个函数1.我不明白,而且2.我不知道如何在java中编写它。代码是:

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

同样,我不知道它是用什么语言编写的。然而,作者声明该函数返回-1到1之间的随机数。有人能解释究竟是什么&amp;符号呢?为什么有一堆看似随机的数字呢?有没有一种简单的方法将其转换为java?

2 个答案:

答案 0 :(得分:5)

内部部分对数字进行哈希处理,&/将此哈希值转换为0到2之间的数字,因此当您执行1 - (..)时,您会得到介于-1和1之间的数字。

获取-1和1之间的随机数的Java方法是

return Math.random() * 2 - 1;

或者如果您需要使用种子

return new Random(x).nextDouble() * 2 - 1;

答案 1 :(得分:1)

这种语言似乎有非常相似的运算符但声明不同。唯一重要的是让Java将这些位解释为IEEE-754浮点数。以下就足够了:

float rNoise(int x){
x = (x<<13) ^ x;
return ( 1.0 - Float.floatToIntBits( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0); 
}

&运算符将独立地对数字的每个位执行位级AND运算,而^将以类似的方式执行XOR运算。看起来XOR用于混合,&用于屏蔽。

相关问题