过去几天我一直试图解决这个问题,但我做不到。我正在尝试生成 _ _ _ 形式的随机数。 _ _ _ _
小数点前 3 位,然后是 4 位小数。
非常感谢任何帮助。谢谢,
院长
您发布的代码有两个小问题。
首先是 rand() % 9999999
只能返回 0 到 9999998 之间的值。您可能想写 rand() % 10000000
。
另一个问题是 rand() % 10000000
会给你带来轻微偏差的结果。我会尝试解释原因。
rand()
函数返回 0 到 RAND_MAX
之间的值,大多数情况下其值为 0x7fffffff
或 2147483647。 (如果您使用的是 Visual Studio,那么它只是 0x7fff
,但我们希望情况并非如此。)
由于 RAND_MAX
不是 10^7 的精确倍数,因此您选择高于 RAND_MAX % 10000000
(即 7483647)的随机值的可能性会稍低一些。这意味着您的结果将稍微偏向 0-7483647 范围。
要解决此问题,请计算高于目标范围上限的 2 的下一个幂的 rand()
模,如果结果太高,则丢弃结果。计算开销可以忽略不计。
下面是一些解决问题的代码:
#include
#include
#include
int main() {
int number;
double p;
srand(time(NULL));
while (1) {
number = rand() % 16777216; /* Next power of 2 higher than 10^7 */
if (number < 10000000) break;
}
p = number / 10000.0;
printf("%08.4f\n", p);
trả về 0;
}
Tôi là một lập trình viên xuất sắc, rất giỏi!