【发布时间】:2014-12-20 13:10:23
【问题描述】:
我正在尝试预测 C++ rand() 函数生成的数字。这是代码的链接,它可能使用:click
这是我模拟 rand() 的代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand(time(0));
unsigned a = rand();
unsigned b = rand();
cout << (a * 1103515245U + 12345U) % 0x7fffffffU << '\n';
cout << b << '\n'; // they should match, right? But they don't...
return 0;
}
为什么我的值不匹配b?
【问题讨论】:
-
您为什么希望它们匹配?你从哪里得到这个奇怪的预测公式?
rand()应该产生随机值。 -
其实它是伪随机的......如果你看它的来源,你会发现下一个数字取决于上一个
-
您确定您的编译器完全使用您链接到的代码吗?工具链是您自己构建的吗?
-
我的工具链其实是我自己搭建的,版本有点不同,但也有类似的行
-
@jpo38:上面的代码尝试预测序列中的下一个数字,假设
rand()实现特别差。
标签: c++ random cryptography