1

生成 [0, 1.0] 之间的随机数

i = (float) rand() / RAND_MAX / 1;

我不只是想打印一个小数点,我希望变量有一个小数点我们如何做到这一点?

(即 0.1 ;不是 0.1224828)

4

3 回答 3

6

你实际描述的是一个随机整数,可能值在 0 到 10 之间。所以你会写:

int i = rand() / (RAND_MAX / 11 + 1);

或者确实是其他一些方法来生成一个整数i,使得 0 <= i <= 10。

现在,i您的值是否按 10 缩放。

如果您想除以 10,请执行以下操作:

float f = i / 10.0;

请注意,二进制浮点变量不能精确表示 0.1、0.2、0.3、0.4、0.6、0.7、0.8 和 0.9。列表中唯一可以精确表达的值是 0.0、0.5 和 1.0。这就是为什么最好将信息存储在整数变量中的原因。

注意:正如其他人所指出的(谢谢),显而易见rand() % 11的随机性很差。我更新了答案以避免使用它。

于 2013-03-28T14:11:01.133 回答
3

当您将值“R”存储在浮点变量中时,您通常不会存储“R”。相反,您必须存储最接近“R”的合法浮点值。comp.lang.c 常见问题

即使您不尝试在某个范围内生成随机整数,您也应该阅读如何获得某个范围内的随机整数? 这个表达

(int)((double)rand() / ((double)RAND_MAX + 1) * N)

比显而易见的要好rand() % N;此外,它的教训也适用于其他情况。

于 2013-03-28T14:19:30.460 回答
0

尝试:

i = ((float)( rand()%11) ) /10;
于 2013-03-28T14:11:01.233 回答