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

数学随机范围负

弘浩博
2023-03-14

如果我做:Math.random() * 4-2

这会让我得到一个范围(-2,2),2是排他性的吗?我认为这是正确的,但我很少得到正数(是的,我知道这是一个随机算法,我们必须无限随机地生成它才能感觉到,但我只是想确保)

新问题

如果我想要所有从-1到1的随机有理数,两个边界都包括在内,那么这条线是否有效:Math.random() * 2.00000000000000001 - 1;

我查了一下,一个超过小数点的双精度可以存储大约52位,这大约是16位,大约是超过这个点的0的数量。

我正在从事的项目是使用蒙特卡罗模拟来估计圆周率的数字,如果你对此有所了解,那么也许你明白为什么我要问所有这些东西。

共有2个答案

濮泳
2023-03-14

数学random()返回[0,1.0]范围内的值,因此表达式应返回值[-2.0,2.0),其中2.0为独占值,而-2.0是包含值。

数学random()是一个伪随机数生成器,因此它可以解释您的负数趋势。如果您想要更好的值分布,您需要查看真正随机数生成的实现。

石苏燕
2023-03-14

这会给我带来一个范围(-2,2),2是排他性的吗?

是的,数学随机() * 4-2在-2到1的范围内为您提供了4种可能性。

您将需要更多的运行来检查分布..

int[] occ = new int[4];
for(int x=0; x<1000000; x++){
    int rand = (int)(Math.random() * 4)-2;
    occ[rand+2] ++;
}

System.out.println("Occurrences for -2: " + occ[0]/10000.0 + "%");
System.out.println("Occurrences for -1: " + occ[1]/10000.0 + "%");
System.out.println("Occurrences for 0: " + occ[2]/10000.0 + "%");
System.out.println("Occurrences for 1: " + occ[3]/10000.0 + "%");

对100万运行的测试表明随机数分布良好:

Occurrences for -2: 24.9779%
Occurrences for -1: 25.0338%
Occurrences for 0: 24.971%
Occurrences for 1: 25.0173%
 类似资料:
  • 问题内容: 我试图为我在1到60之间选择的每一行生成一个随机整数作为计时器。 我已经搜索并继续使用此FLOOR函数作为如何在范围内选择随机整数。这给我每一行1。我想念什么? 我在mysql 5.0.75上 我相信这是查询的其余部分,这可能是一个嵌套问题 问题答案: 这对我有用。您的mysql版本可能是?

  • 本文向大家介绍如何获得MySQL随机整数范围?,包括了如何获得MySQL随机整数范围?的使用技巧和注意事项,需要的朋友参考一下 要获取随机整数范围,请使用函数。创建表的查询- 将记录插入表中。查询如下- 现在,您可以在select语句的帮助下显示所有记录。查询如下- 以下是显示整数的输出- 生成随机整数范围的查询如下- 输出在同一表中显示随机整数范围-

  • 因此,我一直在寻找一个函数,该函数需要2个参数,一个低值和一个高值(均为64位整数),而不是在这些范围之间生成一个随机数。我一直遇到的问题是,这个数字不是64位int,或者边缘的数字比中间的数字更常见。 这是一些代码:它只是一直返回-1或0…

  • 问题内容: 考虑以下代码: 它将返回30到20之间的随机数。但是,我需要它的范围包括负数。 我如何在这一代中包括负数? 我曾尝试使用会是负数的数学,但这导致了错误。简单地减去或加上负数将不会产生所需的值。 编辑: 对不起,我只有半醒。正确的代码是。 问题答案: 要使用和获取设置范围内的随机数: 也适用于负数 所以: 会产生介于-10和30之间的随机整数。 也可以加倍

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

  • 问题内容: 如何生成一个随机整数,这样属于? 我试图用这个: 但是它给我带来了价值。 但就我而言,我需要他们成为。 问题答案: Random generator = new Random(); int i = generator.nextInt(10) + 1;