【发布时间】:2021-06-05 22:55:21
【问题描述】:
我的随机函数总是返回一个“1”而不是...任何东西
它应该返回“0”或“1”
int rnd() {
unsigned int num0 = rand();
if(num0 < 32767.5) {return 0;}
if(num0 > 32767.5) {return 1;}
}
int chk;
bool _True = true;
int main(void) {
while(_True) {
chk = rnd();
printf("%i\n", chk);
//if(chk == 1) {printf("%i\n", chk); _True = false;}
//if(chk == 0) {printf("%i\n", chk); _True = false;}
}
}
【问题讨论】:
-
你的代码有很多错误,但是当我运行它时,我总是从
rnd()函数中得到0的值。那是因为RAND_MAX在我的系统上被定义为 32767。但是,为什么要将unsigned int与浮点常量进行比较? -
好吧,你从来没有播种过你的rng。其次,通过仅在 not 1 时打印来确定“始终为 1”是否是推定的可能会更容易。最后,您的
rand()的域具有高度偏见性。如果您正在寻找一个随机的“位”,那么只需return rand() & 1;(或rand() % 2也可以)。无论告诉您如何进行浮点比较,都没有给您带来太多好处。 -
_True前导_后跟大写字母的标识符保留。不要在你的代码中使用它们。 -
在许多系统上,
RAND_MAX比 32767 大很多;我的是 2147483647。所以你的函数偶尔会返回零,但概率只有大约 1/65536,如果你只是用眼睛看,你可能只会看到 1。