在C中生成随机,均匀分布的实数 [英] Generating a random, uniformly distributed real number in C
问题描述
我想在间隔[0,1]中生成一个随机的实数。
我想为数字设置一个指针,例如 n
,所以每当我说 n
时,
I would like to generate a random, real number in the interval [0,1].
I would like to set a pointer, say n
, for the number so whenever I stated n
, it will be referred to the random generated number.
我已经在StackOverflow和Google上进行了搜索,但是大多数都是C ++或整数。
I have searched on StackOverflow and on Google, but most of them are for C++ or for integers.
我已经尝试过在答案中提示我的这段代码:
I have tried this code suggested to me in the answers:
#include <stdio.h>
#include <stdlib.h>
int main()
{
double n;
double get_random() { return (double)rand() / (double)RAND_MAX; }
n = get_random();
printf("%f", n);
return 0;
}
但是,我只能得到0.00000000的值。
However, I can only get a value 0.00000000.
如何修复程序?
推荐答案
您可以使用:
#include <time.h>
srand(time(NULL)); // randomize seed
double get_random() { return (double)rand() / (double)RAND_MAX; }
n = get_random();
srand()
设置种子 rand
用于生成伪随机数。如果您在第一次致电 rand
之前未致电 srand
,就好像您已致电 srand(1)
(默认设置)。
srand()
sets the seed which is used by rand
to generate pseudo-random numbers. If you don't call srand
before your first call to rand
, it's as if you had called srand(1)
(serves as a default).
如果要排除[1],请使用:
If you want to exclude [1] use:
(double)rand() / (double)((unsigned)RAND_MAX + 1);
完整解决方案:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
double get_random() { return ((double)rand() / (double)RAND_MAX); }
int main()
{
double n = 0;
srand(time(NULL)); // randomize seed
n = get_random(); // call the function to get a different value of n every time
printf("%f\n", n); // print your number
return 0;
}
每次运行它,您都会得到一个不同的数字, n
。
Every time you run it you will get a different number for n
.
这篇关于在C中生成随机,均匀分布的实数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!