c++ - Rand() % 14 只生成值 6 或 13

标签 c++ random srand

每当我运行以下程序时,返回值总是 6 或 13。

#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

//void randomLegs();
//void randomPush();
//void randomPull();
//void randomMisc();


int main(int argc, const char * argv[])
{
    srand(time(NULL));
    //randomLegs();
    cout << rand() % 14;
    return 0;
}

今天和昨天我已经运行了将近一百次程序。

谁能告诉我我做错了什么?

谢谢。

编辑:顺便说一句,如果我将 rand() 的范围更改为 13 或 15,它就可以正常工作。

最佳答案

根据 wikipedia ,Apple 的 MCG 随机数生成器中使用的乘数是 16807。它可以被 7 整除,所以 srand() 之后产生的第一个随机数只有一位熵 mod 14(也就是说,它只能取两个值)。

他们那里的随机数生成器很糟糕。不过,一个简单的解决方案是在 srand 之后立即调用 rand() 几次,然后丢弃结果。

关于c++ - Rand() % 14 只生成值 6 或 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28441158/

相关文章:

c++ - 为什么从字符串到字符数组的赋值缺少最后一个字符?

c - 随机数生成器

c++ - 是什么导致来自 WinHttpSendRequest 的间歇性 SEC_E_BUFFER_TOO_SMALL 错误?

c++ - 段错误(核心已转储)

mysql - 在 MySQL 上公平地选择随机行

c - srand() 是如何工作的?

c - 查看随机序列中的下四个数字(使用 srand 和 rand)

c++ - srand(1) 和 srand(0) 有什么区别

c++ - 使用 C++ 将半字写入闪存时的 ARM Cortex-M HardFault 异常

c# - 如何根据值从字典中随机删除键?