在C中生成随机,均匀分布的实数 [英] Generating a random, uniformly distributed real number in C

查看:96
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆