生成包含在指定值区间中的随机浮点值的最佳方法是什么?

2022-09-01 02:49:52

我想在Java中生成一个随机浮点值。该值必须在可能值的特定范围内。

例如,我必须生成一个在以下范围内的随机值:

MIN: 41,815080
MAX: 41,829191

这些值恰好表示地图上可能的经度范围,但该问题更普遍地适用。

什么是明智的方法?


答案 1

对于范围内的随机值,公式为:

double random = min + Math.random() * (max - min);

无论您使用什么来生成随机数,此基本公式都是常量。

Math.random()提供分布适中的数字,但您可以将其替换为所需的任何随机数生成器,例如(稍微好一点):

Random r = new Random();
double random = min + r.nextDouble() * (max - min);

或者如果你真的想要一个:float

float random = min + r.nextFloat() * (max - min);

为了获得更好的质量(以速度为代价)随机数生成使用

Random random = new SecureRandom();

或者,您可以使用更具异国情调的第三方库,例如:

import org.apache.commons.math3.random.RandomDataGenerator;

RandomData random = new RandomDataGenerator();

它使用优越的Well19937c算法。


答案 2

如果要生成随机浮点值,请尝试以下操作:

import java.util.Random;

public static float randFloat(float min, float max) {

    Random rand = new Random();

    return rand.nextFloat() * (max - min) + min;

}

希望这有帮助。