从 C++ 中的 [0,1] 中获取随机双精度数
Get random double number from [0,1] in C++
我想生成随机双精度数x
,其中: 0 <= x <= 1
:
double x = ((double) rand() / (RAND_MAX));
这是从 [0,1] 获取随机双精度数的正确方法吗?
是的,因为std::rand()
同时返回0
和RAND_MAX
。但是,如果可以使用 C++11,则可以改用std::uniform_real_distribution
。
另外不要忘记初始化你的随机数生成器,否则你将在每次执行中获得相同的序列。如果你使用std::rand
,std::srand( std::time(0) )
几乎总是足够的。
是的。
不过,有些括号是多余的。
这取决于你的应用是否可以信任你的系统 rand(3) 函数。对于严肃的蒙特卡洛模拟,您将需要来自数字库中的记录良好的随机数生成器。
是的,我相信它在随后生成时会以随机顺序给你 0 和 1。但一定要初始化随机数生成器函数,以避免一次又一次地获得相同的序列。
是的,但我建议也投RAND_MAX双倍:
double r = ((double)rand() / (double)(RAND_MAX));
尽管有时没有必要,但编译器可能会根据目标和源变量类型自动将运算符强制转换为另一种类型。例如:
3.5/2 可能等于 1 而不是 1.75,因为除数是一个整数,为了避免这种情况,您必须执行以下操作:
3.5/2.0 或 3.5/(双倍)2
如果你正在寻找一个随机的双倍,这就是我实现它的方式。
如果您正在函数中寻找它,我可以编辑这篇文章。
rand() 包含在 stdlib.h 中
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
int main()
{
double num;
double max;
srand(time(NULL));
cout << "Enter a number.";
cin >> max;
num = (((double)rand()*(max) / RAND_MAX) - max) *(-1);
cout << num;
}
相关文章:
- 为什么我的 2d 数组的第二行从 RAM 中获取随机值?
- 如何在 C++ 中获取随机函数的周期性
- C 编程:在循环时运行 2 并从 loop1 获取数据的随机结果
- 有什么方法可以从C 中的Enum类获取随机
- 从容器中获取随机元素,该容器在恒定时间内没有严格的元素顺序
- 在新数组中获取随机值
- 从满足谓词的迭代器中均匀随机的容器中获取迭代器
- 根据值的概率从 Map 获取随机键
- 试图从文件中获取随机数字的总和
- 无法获取随机字符串
- 如何从向量中获取随机和唯一值?
- Qhash-热以获取随机键和价值
- 如何从指针列表中获取随机指针
- 获取随机科学数字而不是输入
- 从 C++ 中的 [0,1] 中获取随机双精度数
- 获取随机元素并将其移除
- C++ Int 在不应该更改它的函数后获取随机值
- 这是从容器中获取随机元素的OK范围的方法吗
- 使用Winsock获取随机/奇怪的数据
- C++:将字符转换为 int 时获取随机负值