在 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));

希望对您有所帮助:)