Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么rand()会产生高于比例因子的随机数?_C++_Random - Fatal编程技术网

C++ 为什么rand()会产生高于比例因子的随机数?

C++ 为什么rand()会产生高于比例因子的随机数?,c++,random,C++,Random,我试图得到一个随机数,最大为使用的比例因子1112,最小为1000,这是我正在使用的移位值。然而,当我运行程序时,我得到的输出是1127。我做错了什么?多谢各位 代码如下: #include <iostream> #include <cstdlib> using namespace std; int main() { int n = 0; n = 1000 + rand() % 1112; cout << n << en

我试图得到一个随机数,最大为使用的比例因子1112,最小为1000,这是我正在使用的移位值。然而,当我运行程序时,我得到的输出是1127。我做错了什么?多谢各位

代码如下:

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int n = 0;
    n = 1000 + rand() % 1112;
    cout << n << endl;
}
尝试:


我还没有测试过。我可能把+1放错地方了。

你知道兰德是怎么工作的吗?兰德%1112生成的数字范围为[01111]。将1000添加到该值,从而将其转换为[10002111]的范围。因此,一般来说,+rand%x产生的数字范围为[a,a+x-1]。@carcigenicat谢谢你,是的,这就是我想做的。@AlgirdasPreidžius我不明白它是如何工作的。谢谢你的解释!我不明白这是怎么回事。我很好奇,你是从哪里了解到它是如何工作的,包括像比例因子这样的术语?由于阅读的文档显示,它返回一个介于​0​ 包括RAND_MAX 0和RAND_MAX….%是模运算符,+是加法运算符。@JohnAbdelmalek该书于2011年3月出版。这是在C++ 11发布之前,一个主要的新版本的C++,具有许多新的核心和库特征,例如RAND。这本书将教你的C++过时了,即C++ 98或C++ 03。在C++11之后,已经有了两个新版本的语言,C++14和C++17,下一个版本的C++20也已经有了一个功能完整的草稿。如果没有完整的功能,你的答案肯定会更好。试试这个,但我没有试过,如果你解释OP做错了什么。如果你不知道,有许多在线C++编译器让尝试代码变得非常容易。我用了,但还有其他的。或者不要。没有尝试。@eckes很明显,如果您正在寻找加密强随机数,那么无论您使用何种语言或操作系统,您都不会使用内置的库随机数生成器。但是,如果,像98%的所有需要它的人一样,你所需要的只是一个足够快、足够好、大部分是随机选择的东西,而不是非常重要的东西,那么使用内置的库函数可能足够快、足够好、大部分是随机的。我想,任何需要加密强随机数的人都会问一个完全不同的问题。@Tas,告诉我,如果你尝试了,但没有效果。我希望它能工作。重点是,但我不认为在没有警告的情况下展示已知的错误实现是好的-人们可能会实际使用它们,
1127
Program ended with exit code: 0
int max = 1112;
int min = 1000;
int range = max - min + 1;
n = rand() % range + min;