# 亂數函數
2020, jeeeerrrpop
---
## rand()
[C++ reference-rand](http://www.cplusplus.com/reference/cstdlib/rand/)
```cpp
#include <iostream>
#include <cstdlib>
int main() {
for(int i = 0; i < 5; i++)
std::cout << rand();
return 0;
}
```
---
怎麼好像每次數字都一樣?
---
```cpp
static unsigned long int next = 1;
int rand(void) // RAND_MAX assumed to be 32767
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}
```
[source](https://stackoverflow.com/questions/4768180/rand-implementation)
---
```cpp
#include <iostream>
#include <cstdlib>
int main() {
srand(7122);
for(int i = 0; i < 5; i++)
std::cout << rand() << std::endl;
return 0;
}
```
---
```cpp
void srand(unsigned int seed)
{
next = seed;
}
```
---
[c++ reference - time](http://www.cplusplus.com/reference/ctime/time/)
---
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand(time(NULL));
for(int i = 0; i < 5; i++)
std::cout << rand() << std::endl;
return 0;
}
```
---
如果我想產生0~9之間隨機的數字
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand(time(NULL));
std::cout << rand() % 10;
return 0;
}
```
---
如果我想產生1~10之間隨機的數字
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand(time(NULL));
std::cout << rand() % 10 + 1;
return 0;
}
```
---
如果我想產生x~y之間隨機的數字
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand(time(NULL));
int x = 133, y = 999;
std::cout << rand() % (y - x + 1) + x;
return 0;
}
```
---
## 延伸學習
[C++11 的 Random library, 你還在用rand()嗎?](http://chino.taipei/note-2016-1020C-11-的-Random-library-你還在用rand-嗎/)
{"metaMigratedAt":"2023-06-15T06:24:22.601Z","metaMigratedFrom":"Content","title":"亂數函數","breaks":true,"contributors":"[{\"id\":\"7692497a-be9a-4cb4-81b9-afb37e7453a8\",\"add\":1910,\"del\":160}]"}