生成 [0, 1.0] 之间的随机数
i = (float) rand() / RAND_MAX / 1;
我不只是想打印一个小数点,我希望变量有一个小数点我们如何做到这一点?
(即 0.1 ;不是 0.1224828)
生成 [0, 1.0] 之间的随机数
i = (float) rand() / RAND_MAX / 1;
我不只是想打印一个小数点,我希望变量有一个小数点我们如何做到这一点?
(即 0.1 ;不是 0.1224828)
你实际描述的是一个随机整数,可能值在 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
的随机性很差。我更新了答案以避免使用它。
当您将值“R”存储在浮点变量中时,您通常不会存储“R”。相反,您必须存储最接近“R”的合法浮点值。comp.lang.c 常见问题
即使您不尝试在某个范围内生成随机整数,您也应该阅读如何获得某个范围内的随机整数? 这个表达
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
比显而易见的要好rand() % N
;此外,它的教训也适用于其他情况。
尝试:
i = ((float)( rand()%11) ) /10;