我正在尝试生成一个随机双精度值,但不包括它的下限和上限(下限,上限)。我已经看到了很多有关生成数字的问题,包括从数字的下限到上限,但不包括数字的上限(下限,上限),但是由于没有解决此问题,因此他们没有回答我的问题。
我已经为这个问题提出了两个“解决方案”,但都不是很满意。
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;
虽然这可以确保我第一次尝试时获得有效的号码,但在这种情况下,我认为分布并不均匀。
谢谢
您的第一个代码是正确的。
double myvalue;
do {
myvalue = myrandom.nextDouble() * (upper - lower) + lower;
} while (myvalue == lower); // Replace != with ==
只需替换!=
为==
。这不是很有效,这是不正确的。
看代码的效率。
看一下nextDouble
您的代码,您会发现它是经过计算生成的随机long值。
这意味着基本上您将有1种可能性在2 * 9,223,372,036,854,775,807(长数值范围减去1)上重复循环。
附加说明
:由于您使用double
而不是a,因此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的可能方式: 将返回介于最小值(包含)和最大值(不含)之间的伪随机双精度值。范围不一定是,可以是。
我试图在两者之间生成一个随机的双倍,但不包括它的下界和上界(lower,upper)。我见过很多关于从生成一个数字的问题,包括它的下界,但不包括它的上界[lower,uper),但它们没有回答我的问题,因为它们没有解决这个问题。 我想出了两个“解决方案”来解决这个问题,但对任何一个都不满意。 虽然这几乎每次都能在第一次尝试时给出一个有效的结果,但它似乎不一致且笨拙,而且在rng返回0.0的可能性很
问题内容: 我看过很多文章,解释了这个问题,但是他们都使用整数值,老实说,我并没有完全理解它,所以这个问题: 我正在尝试在Java中生成从(-1554900.101)到(52952058699.3098)范围的随机数,我想知道是否有人可以向我解释这一点,因为我真的很想理解它。 我的想法:这是正确的方法吗?1)生成一个在我指定范围内的随机整数2)将生成的数除以pi以得到float / double随
本文向大家介绍C#产生随机双,包括了C#产生随机双的使用技巧和注意事项,需要的朋友参考一下 示例 生成介于0和1.0之间的随机数。(不包括1.0)
问题内容: 如何在给定范围之间生成奇数随机数。 对于例如:对于1到6之间的范围。随机编号为3或1或5 产生随机数的方法: 请参阅如何在Java中生成特定范围内的随机整数? 产生奇数随机数的方法 此函数将始终将2转换为3而不是1。我们能否使它成为一个更随机的函数,该函数有时将2转换为3,有时转换为1? 问题答案: 假设max为包容性,我建议以下几点: 它导致所有奇数之间的偶数分布。
问题内容: 因此,我在此代码位中的目标是随机掷两个骰子,众所周知,您的普通骰子只有6个面,因此我导入了Foundation以访问arc4random_uniform(UInt32)。我尝试使用(1..7)的范围来避免随机获得0,但是返回了一个我不太喜欢的错误。我试图这样做: 但是那又回来了 找不到接受提供的参数的’init’的重载 我希望这是足够的信息,可以为您提供帮助,帮助您:) 请注意,我只是