如何在 C 中生成随机整数值? 我需要它像掷硬币一样起作用。 这是我尝试过的:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
#include <time.h>
int main(void)
{
int i;
srand(time(NULL));
for (i=0; i<10; i++)
if ((int)(((float) rand() / ((float) SHRT_MAX)) * 2) > 0)
puts("etz");
else
puts("pali");
return EXIT_SUCCESS;
}
最佳答案
您的解决方案的问题是 rand()
始终返回正整数,因此表达式 (int)(((float) rand()/((float) SHRT_MAX)) * 2) > 0
始终为 true,除非在 short
和 int
宽度相同的平台上。
另一个问题是 rand()
返回一个从零到 RAND_MAX
的值,而不是 SHRT_MAX
- 在现代库中不太可能RAND_MAX == SHRT_MAX
您的解决方案可能会这样调整:
(float)rand() / RAND_MAX > 0.5f
但是转换和浮点比较是不必要的,而且过于复杂,可以这样测试:
rand() > RAND_MAX / 2
可能会建议您可以使用以下方法来测试奇数/偶数:
rand() % 2 == 0
但这在一些实现不佳的算法中是有问题的,因为它依赖于单个 LSB 的随机性 - 它可能在现代库中工作,但最好避免以确保代码可移植性。
关于c - 如何在c中为硬币翻转生成一个随机int值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48045250/