88 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: Random Functions
 | ||
| localeTitle: 随机函数
 | ||
| ---
 | ||
| *   随机数是将随机化引入程序的便捷方式。例如,如果你想运行任何模拟或玩游戏,删除数组的随机索引等,那么随机数就是要走的路。
 | ||
| *   要包含在c ++中使用随机数的头文件是`cstdlib` 。
 | ||
| *   _专业提示: -_您可以使用`cpp #include<bits/stdc++.h>`来包含所有头文件中的所有函数。
 | ||
| 
 | ||
| 功能: - rand()  
 | ||
| \- 返回从0到RAND _MAX_的伪随机数(整数) _。不接受任何争论。 - RAND_ MAX是允许的最大整数。它是编译器依赖,通常是2147483647。
 | ||
| 
 | ||
| 以下是一个例子: -
 | ||
| 
 | ||
| ```cpp
 | ||
| #include <cstdlib> 
 | ||
|  #include <iostream> 
 | ||
|  using namespace std; 
 | ||
|  
 | ||
|  int main() { 
 | ||
|   cout << rand() << endl; 
 | ||
|   cout << rand() << endl; 
 | ||
|   cout << rand() << endl; 
 | ||
|   return 0; 
 | ||
|  } 
 | ||
|  
 | ||
|  /* 
 | ||
|  Output:- (Note that the output is random and will differ from what is mentioned here) 
 | ||
|  1804289383 
 | ||
|  846930886 
 | ||
|  1681692777 
 | ||
|  */ 
 | ||
| ```
 | ||
| 
 | ||
| 现在,再次运行该程序。然后再次。然后再次。你看到了什么? 一次又一次地打印相同的输出。
 | ||
| 
 | ||
| 让我们回到rand()函数的定义: -
 | ||
| 
 | ||
| rand(): - _返回从0到RAND\_MAX的**伪随机**数(整数)。不接受任何争论。_
 | ||
| 
 | ||
| 那么什么是伪随机数?
 | ||
| 
 | ||
| *   顾名思义,一个非真正随机的数字是伪随机数。
 | ||
| *   伪随机数不是加密安全的,容易受到攻击。
 | ||
| *   在C ++的上下文中,数字看起来是随机的,但不是真正随机的。该函数假定从0到RAND\_MAX的每个数字都具有相同的可能性并吐出一个数字。 (事实上, 事实并非如此,但它很接近)。例如,数字5几乎用于所有地方。如果随机数吐出5,您可能认为该数字不是随机的。
 | ||
| *   随机函数rand()占用一个非常大的数字,通过一个大的素数应用模数,并对数字进行各种操作并返回一个值。无论多么复杂,它仍有可能打破它。
 | ||
| 
 | ||
| 我们如何在每个程序执行时获得一组独特的随机数?
 | ||
| 
 | ||
| 我们使用`void srand(int seed)` ;
 | ||
| 
 | ||
| *   “种子”是赋予一个数字的名称,使得随机序列生成器每次都在不同的起始点开始。这可确保随机函数在程序运行期间不会吐出相同的值。
 | ||
| *   **重要的是只在程序开始时调用sCE调用ONCE。**
 | ||
| *   不需要重复调用来播种随机数生成器(实际上,它会使您的数字不均匀 分散式)。
 | ||
| *   一种常用的技术是使用时钟为随机数生成器播种,因为每次看时它都会为您提供不同的输出。因此,对于种子,您可以获取时间输出并将其插入随机数生成器。
 | ||
| *   time()函数将返回计算机的时间。这表示为数量 自1970年1月1日(大纪元)以来已经过去的秒数。
 | ||
| *   函数时间(NULL)将返回计算机时间内经过的秒数。
 | ||
| *   时间函数必须包含的头文件:\`ctime'。
 | ||
| 
 | ||
| 代码段:
 | ||
| 
 | ||
| ```cpp
 | ||
| #include <ctime> 
 | ||
|  
 | ||
|  srand(time(NULL)); 
 | ||
|  cout << rand(); 
 | ||
|  
 | ||
|  /* 
 | ||
|  Output: (Will differ from computer to computer, and because of the seed, will also differ from time to time, literally. :D) 
 | ||
|  1696269016 
 | ||
|  */ 
 | ||
| ```
 | ||
| 
 | ||
| 每次运行程序时,这会产生不同的值。
 | ||
| 
 | ||
| 额外奖励:根据您的方便调整兰特()。
 | ||
| 
 | ||
| *   由于rand()返回一个从0到RAND\_MAX的随机数,如果你想要一个0到8之间的数字,那么 -rand()%9。 任何模9的数字都将返回0到8之间的值。
 | ||
|     
 | ||
| *   更正式的是,如果你想要一个L(包括)和U(包括)之间的数字,你必须这样做 `int num = L + rand()%(U-L+1).` 说明: - rand()%(UL + 1)返回0和(UL)的随机(伪随机,别忘记)数字。因此,添加L确保我们得到L和U之间的值。
 | ||
|     
 | ||
|     摘要:-
 | ||
|     
 | ||
| 
 | ||
| 1.  int rand():返回0到RAND\_MAX之间的随机数。
 | ||
|     
 | ||
| 2.  void srand(int seed):用于为随机数生成器设定种子。仅调用此函数_一次_就足够了。
 | ||
|     
 | ||
|     ### 来源: - [随机数生成](http://www.math.uaa.alaska.edu/~afkjm/csce211/handouts/RandomFunctions) |