c++ - rand() 介于 0 和 1 之间

标签 c++ random

所以下面的代码使得 0 < r < 1

r = ((double) rand() / (RAND_MAX))

为什么会有r = ((double) rand() / (RAND_MAX + 1))使 -1 < r < 0?

不应该在 RAND_MAX 上加一使得 1 < r < 2?

编辑:我收到警告:表达式中的整数溢出

在那条线上,所以这可能是问题所在。我刚刚做了cout << r << endl它肯定给了我介于 -1 和 0 之间的值

最佳答案

这完全是特定于实现的,但似乎在您正在使用的 C++ 环境中,RAND_MAX等于 INT_MAX .

因此,RAND_MAX + 1表现出未定义(溢出)行为,并变为 INT_MIN .虽然您的初始语句正在划分(0 和 INT_MAX 之间的随机 #)/(INT_MAX)并生成一个值 0 <= r < 1 ,现在它正在划分(0和INT_MAX之间的随机#)/(INT_MIN),生成一个值-1 < r <= 0

为了生成随机数1 <= r < 2 ,你会想要的

r = ((double) rand() / (RAND_MAX)) + 1

关于c++ - rand() 介于 0 和 1 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878965/

相关文章:

c++ - cygwin : sometimes unix style paths 上的 gcc -MM

c++ - 如何使用指针从不同的函数访问局部变量?

php - 在 PHP 中,如何生成一个大的伪随机数?

java - 使用 java.time 生成一个随机的 LocalDate

c++ - 嵌入式文件作为 char 数组的编译器问题

c++ - strcpy_s 未处理的异常?

random - 在 Fortran 模块中生成随机数

java - 随机数问题

java - 如何使用种子生成随机数,并用它们填充二维数组

c++ - 将 execl 命令的结果(即目录列表)通过管道传递给父进程?