Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成介于-1和1之间的随机数?_Java_Random_Simplex - Fatal编程技术网

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

Java 生成介于-1和1之间的随机数?,java,random,simplex,Java,Random,Simplex,所以我找到了这个有用的网站,里面有很多关于柏林噪声和单纯形噪声的代码和解释。但是,代码是用另一种语言编写的。我能够为java重写它的大部分内容,但是有一个函数是1。我不明白,还有。我不知道如何用java编写它。代码是: function IntNoise(32-bit integer: x) x = (x<<13) ^ x; return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 137631258

所以我找到了这个有用的网站,里面有很多关于柏林噪声和单纯形噪声的代码和解释。但是,代码是用另一种语言编写的。我能够为java重写它的大部分内容,但是有一个函数是1。我不明白,还有。我不知道如何用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
函数IntNoise(32位整数:x)

x=(x内部部分对数字进行散列,
&
/
将此散列转换为0到2之间的数字,因此当您执行
1-(…)
时,您会得到一个介于-1和1之间的数字

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

return Math.random() * 2 - 1;
或者如果你需要使用种子

return new Random(x).nextDouble() * 2 - 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); 
}
float rNoise(整数x){

x=(xHint:Java中
&
做什么?@JackManey OP问的正是(“有人能解释一下&symbol到底做什么吗?”)顺便说一句,除非用于代码高尔夫或某种模糊代码竞赛,否则这是可怕的、可怕的代码。最好只做
2*Math.random()-1
@hexafraction:有文档可以解释这一点。我试图让OP学习如何捕鱼,而不是将另一条鱼塞进他/她的嘴里。记住,该代码可能不会生成-1和1之间的随机数。它可能生成-1和1之间的随机数,一端包含在内,另一端包含ot她的独占性。也就是说,-1或+1将超出生成的数字范围。Math没有构造函数。你是说
java.util.Random
?你可以使用
Math.Random()
,但仅当不使用种子时。请参见此处:@PeterLawrey,您的第二个代码会引发错误。
错误:数学类中的构造函数数学无法应用于给定的类型
必需:未找到参数:int
我以前尝试过类似的方法,但它不起作用。不过,我刚才又尝试了一次,它确实起了作用st以前写错了。我没有完全使用您的代码,而是创建了一个新的随机数,将种子设置为x,然后返回下一个double*2-1。如果不了解随机数生成器,我认为实现随机数生成器不是一个好主意。我们不知道代码的原始作者是否知道。我会使用内置的-在函数per@Jack Maney和trust peer review中。Jack的版本也更容易理解。@TonyEnnis我正在回答OP的原始问题:“有人能解释一下&符号的确切用途吗?为什么会有一堆看似随机的数字?有没有简单的方法将其转换为java?”.^^^^@hexafraction说了什么。此外,从头开始实施任何算法都有很多原因,比如想要学习。我经常这样做。我没有投你反对票,但这仍然是一个糟糕问题的糟糕答案。