c++ 随机数,浮点数据随机

本文介绍了如何使用C语言中的rand函数生成随机数,并通过实例展示了如何生成不同范围内的随机整数及浮点数。此外,还介绍了如何利用当前时间初始化随机数生成器以确保每次运行程序时都能得到不同的随机数序列。
使用rand函数获得随机数。rand函数返回的随机数在0-RAND_MAX(32767)之间。 
    例子: 
    /* RAND.C: This program seeds the random-number generator 
    
 * with the time, then displays 10 random integers. 
    
 */ 
     
    
#include <stdlib.h> 
    
#include <stdio.h> 
    
#include <time.h> 
     
    
void main( void ) 
    
{ 
     
int i; 
     
     
/* Seed the random-number generator with current time so that 
    
 * the numbers will be different every time we run. 
    
 */ 
     
srand( (unsigned)time( NULL ) ); 
     
     
/* Display 10 numbers. */ 
     
for( i = 0; i < 10;i++ ) 
     
printf( " %6d\n", rand() ); 
    
} 
     
    
 
    在调用这个函数前,最好先调用srand函数,如srand( (unsigned)time( NULL ) ),这样可以每次产生的随机数序列不同。
    如果要实现类似0-1之间的函数,可以如下: 
    double randf() 
    
{ 
     
return (double)(rand()/(double)RAND_MAX); 
    
} 
     
    
 
    如果要实现类似Turbo C的random函数,可以如下: 
    int random(int number) 
    
{ 
     
return (int)(number/(float)RAND_MAX * rand()); 
    
}
C++中的随机数函数主要分为C++11以前和C++11及以后两个阶段。 在C++11以前,比较常用的随机数函数是`rand()`。该函数的原型为`int rand(void)`,其头文件为`#include <stdlib.h>`。为了让每次运行程序时得到不同的随机数序列,通常会使用`srand()`函数以当前时间作为递推的基准(起始),示例代码如下: ```cpp #include <stdlib.h> #include <time.h> #include <iostream> int main() { srand((unsigned)time(NULL)); for(int i = 0; i < 10; i++) { std::cout << rand() << '\t'; } return 0; } ``` 不过,`rand()`函数的随机性存在一定限制[^1]。 C++11引入了新的随机数库`random`,提供了更多功能的随机数生成函数,可根据需要生成浮点随机数、非负整数随机数等。以下是非负整数随机数相关的操作: - `Engine e`:创建一个引擎。 - `Engine e(s)`:创建一个引擎,并用`s`作为种子。 - `e.seed(s)`:使用种子`s`重置`e`的状态。 - `e.min()`, `e.max()`:获取`e`能生成的最小值和最大值。 - `e.discard(u)`:将`e`推进`u`步(`u`的类型为`unsigned long long`)。 示例代码如下: ```cpp #include <iostream> #include <random> #include <ctime> int main() { std::default_random_engine e; e.seed((unsigned)std::time(0)); for(int i = 0; i < 10; ++i) { std::cout << e() << std::endl; } return 0; } ``` 此外,C++中`rand()`函数是`int`类型,可以直接输出,也可以赋值,使用较为方便,示例代码如下: ```cpp #include <iostream> #include <cstdlib> int main() { std::cout << rand(); return 0; } ``` [^1][^2][^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值