在 java 中生成一个介于 0 和无穷大之间的随机双精度数
generating a random double between 0 and infinity in java
我有这个代码
我正在尝试向方法 "fun"
发送一个随机双精度值
这里的BL是双1
double inf=Double.POSITIVE_INFINITY;
double rand=inf*R.nextDouble();
double myrand=fun(rand)*BL;
mylist.get(i).set_speed(myrand);
这里是"fun"方法
double fun(double v)
{
return ((pow(A,K)*exp((-1)*A*v)*pow(v,K-1))/(fact(K-1)));
}
但是速度参数的输出总是NaN
据我所知,双倍数无法达到无穷大。试试这个
double rand = R.nextDouble(Double.MAX_VALUE- 1);
这将创建一个介于 0 和双精度最大值之间的随机双精度数
尝试将此行 inf*R.nextDouble();
更改为 Double.MAX_VALUE * R.nextDouble();
如果您还需要不时获取 Double.POSITIVE_INFINITY
,那么您必须实现一个额外的 if 块并随机 return Double.POSITIVE_INFINITY
在某些情况下。
获取正号大于等于0.0小于Double.MAX_VALUE的double值:
double r = Math.random()*Double.MAX_VALUE
然后只需将结果传递给您的函数即可。
你不能得到 0 到无穷大之间的数字。
因为如果你能得到一个无穷大的数字。
1.But 你可以获得一个最大值的随机数,如:
int random(int max)
{
return (int) (Math.random() * max);
}
2.With最小数量:
int random(int min, int max)
{
int range = (max - min) + 1;
return (int) (Math.random() * range) + min;
}
3.Type如果你不想要任何小数:
int random(int min, int max)
{
int range = (max - min) + 1;
return (int) Math.round((Math.random() * range) + min);
}
否则,如果您想向下或向上舍入:
//round down
(int) Math.floor((Math.random() * range) + min);
//round up
(int) Math.ceil((Math.random() * range) + min);
留言号码:
//between 500 1000 (function 2 or 3)
JOptionPane.showMessageDialog(null, random(500, 1000));
//or just maximal: 1000 (function 1)
JOptionPane.showMessageDialog(null, random(1000));
希望对您有所帮助:)
我有这个代码
我正在尝试向方法 "fun"
发送一个随机双精度值这里的BL是双1
double inf=Double.POSITIVE_INFINITY;
double rand=inf*R.nextDouble();
double myrand=fun(rand)*BL;
mylist.get(i).set_speed(myrand);
这里是"fun"方法
double fun(double v)
{
return ((pow(A,K)*exp((-1)*A*v)*pow(v,K-1))/(fact(K-1)));
}
但是速度参数的输出总是NaN
据我所知,双倍数无法达到无穷大。试试这个
double rand = R.nextDouble(Double.MAX_VALUE- 1);
这将创建一个介于 0 和双精度最大值之间的随机双精度数
尝试将此行 inf*R.nextDouble();
更改为 Double.MAX_VALUE * R.nextDouble();
如果您还需要不时获取 Double.POSITIVE_INFINITY
,那么您必须实现一个额外的 if 块并随机 return Double.POSITIVE_INFINITY
在某些情况下。
获取正号大于等于0.0小于Double.MAX_VALUE的double值:
double r = Math.random()*Double.MAX_VALUE
然后只需将结果传递给您的函数即可。
你不能得到 0 到无穷大之间的数字。
因为如果你能得到一个无穷大的数字。
1.But 你可以获得一个最大值的随机数,如:
int random(int max)
{
return (int) (Math.random() * max);
}
2.With最小数量:
int random(int min, int max)
{
int range = (max - min) + 1;
return (int) (Math.random() * range) + min;
}
3.Type如果你不想要任何小数:
int random(int min, int max)
{
int range = (max - min) + 1;
return (int) Math.round((Math.random() * range) + min);
}
否则,如果您想向下或向上舍入:
//round down
(int) Math.floor((Math.random() * range) + min);
//round up
(int) Math.ceil((Math.random() * range) + min);
留言号码:
//between 500 1000 (function 2 or 3)
JOptionPane.showMessageDialog(null, random(500, 1000));
//or just maximal: 1000 (function 1)
JOptionPane.showMessageDialog(null, random(1000));
希望对您有所帮助:)