Java 生成介于-1和1之间的随机数?
所以我找到了这个有用的网站,里面有很多关于柏林噪声和单纯形噪声的代码和解释。但是,代码是用另一种语言编写的。我能够为java重写它的大部分内容,但是有一个函数是1。我不明白,还有。我不知道如何用java编写它。代码是: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
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说了什么。此外,从头开始实施任何算法都有很多原因,比如想要学习。我经常这样做。我没有投你反对票,但这仍然是一个糟糕问题的糟糕答案。