当前位置: 首页 > 知识库问答 >
问题:

在排他范围内生成随机双倍

柯学
2023-03-14

我试图在两者之间生成一个随机的双倍,但不包括它的下界和上界(lower,upper)。我见过很多关于从生成一个数字的问题,包括它的下界,但不包括它的上界[lower,uper),但它们没有回答我的问题,因为它们没有解决这个问题。

我想出了两个“解决方案”来解决这个问题,但对任何一个都不满意。

double myvalue;
do { myvalue = myrandom.nextDouble() * (upper - lower) + lower; } while (myvalue == lower);

虽然这几乎每次都能在第一次尝试时给出一个有效的结果,但它似乎不一致且笨拙,而且在rng返回0.0的可能性很小的情况下,它的效率也很低。

double myvalue = 
0.5 * (1.0 + myrandom.nextDouble() - myrandom.nextDouble()) * (upper - lower) + lower;

虽然这将保证我在第一次尝试时有一个有效的数字,但我不相信在这种情况下分布是统一的。

谢谢

共有1个答案

秦才
2023-03-14

您的第一个代码非常正确。

double myvalue;
do { 
    myvalue = myrandom.nextDouble() * (upper - lower) + lower; 
} while (myvalue == lower);  // Replace != with ==

只需将!=替换为==。这并不是一个没有效率的事实。

看看代码的效率。

查看NextDouble的代码,您可以看到它是通过计算生成一个随机长值的。

这意味着基本上您将有1个可能性在2*9,223,372,036,854,775,807(长值减去1的范围)上重复循环

附加注意:由于您使用的是double而不是bigdecimal,您可以获得一个myvalue,该值接近lower界限,但低于该界限,因此最好更改代码以同时排除低于lower的值。它不会改变代码的效率。

double myvalue;
do { 
    myvalue = myrandom.nextDouble() * (upper - lower) + lower; 
} while (myvalue <= lower);  // Replace != with <=
 类似资料:
  • 问题内容: 我有两个如下的双打 使用随机生成器,我需要在min和max范围之间创建一个双精度值。 但是这里没有什么可以指定范围的。 问题答案: 在Java 7发行之前曾问过这个问题,但是现在,还有另一种使用Java 7(及更高版本)API的可能方式: 将返回介于最小值(包含)和最大值(不含)之间的伪随机双精度值。范围不一定是,可以是。

  • 问题内容: 我看过很多文章,解释了这个问题,但是他们都使用整数值,老实说,我并没有完全理解它,所以这个问题: 我正在尝试在Java中生成从(-1554900.101)到(52952058699.3098)范围的随机数,我想知道是否有人可以向我解释这一点,因为我真的很想理解它。 我的想法:这是正确的方法吗?1)生成一个在我指定范围内的随机整数2)将生成的数除以pi以得到float / double随

  • 问题内容: 我正在尝试生成一个随机双精度值,但不包括它的下限和上限(下限,上限)。我已经看到了很多有关生成数字的问题,包括从数字的下限到上限,但不包括数字的上限(下限,上限),但是由于没有解决此问题,因此他们没有回答我的问题。 我已经为这个问题提出了两个“解决方案”,但都不是很满意。 第一个“解决方案” 尽管这几乎每次都会在第一次尝试时给出有效的结果,但它似乎不一致且笨拙,并且如果rng经常返回0

  • 问题内容: 如何在给定范围之间生成奇数随机数。 对于例如:对于1到6之间的范围。随机编号为3或1或5 产生随机数的方法: 请参阅如何在Java中生成特定范围内的随机整数? 产生奇数随机数的方法 此函数将始终将2转换为3而不是1。我们能否使它成为一个更随机的函数,该函数有时将2转换为3,有时转换为1? 问题答案: 假设max为包容性,我建议以下几点: 它导致所有奇数之间的偶数分布。

  • 问题内容: 我需要生成一个范围内的随机唯一数字吗?怎么做 ? 我可以通过生成随机数 我知道这段代码不好,所以我需要一个更好的优化版本代码!帮帮我 ! 例如:如果我需要在1到15之间生成3个数字,它们应该像5、9、1而不是3,1,2 [具有1-3(我要生成的数字)] 问题答案: 以随机顺序排列数字范围的数组: 包装功能: 例: 结果:

  • 本文向大家介绍Java 生成给定范围内的随机数,包括了Java 生成给定范围内的随机数的使用技巧和注意事项,需要的朋友参考一下 为了生成给定范围内的随机数,Java代码如下- 示例 输出结果 名为Demo的类包含主要功能。在这里,将创建一个新的随机实例以及一个新的数组列表。创建随机元素并将其分配给变量。使用add函数将这些随机变量添加到列表中。这些元素显示在控制台上。