美文网首页
精度更高的随机数生成函数 rand_s

精度更高的随机数生成函数 rand_s

作者: 王晓宇_xiaoyuwang | 来源:发表于2016-10-10 20:40 被阅读0次

(简书处女写)

此方法只适用于WINDOWS下

rand() 结合 srand() 函数可以有效地获取随机数序列 大多数情况下已经够用,然而srand()产生的seed每秒更新一次。考虑到频发调用随机数生成函数,存在1秒内需要不同的随机数,这正是rand + srand所不能实现的。
较为简单的一种做法为使用rand_s函数,使用时要在代码前添加:

#define _CRT_RAND_S 

#include<stdlib.h>

注:_CRT_RAND_S 应定义在stdlib.h前

由于C语言已经提供stdlib库于是只需要包括这个头文件并定义_CRT_RAND_S即可
有了这个基础,接下来就是得到具体的实现方法,于是利用rand_s的随机数生成函数如下:

unsigned int Random(int max) 

{ 
   errno_t err; 
   unsigned int number; 
   err = rand_s(&number); 
   if(err != 0) 
   { 
     return 0;
   } 
   return (unsigned int)((double)number / ((double)UINT_MAX + 1) * double(max)) + 1; 
} 

完整代码如下:

#define _CRT_RAND_S 
​
#include <iostream>
#include <stdlib.h>
​
using namespace std;
​
unsigned int Random(int max) 
{ 
   errno_t err; 
   unsigned int number; 
   err = rand_s(&number); 
   if(err != 0) 
   { 
     return 0;
   } 
   return (unsigned int)((double)number / ((double)UINT_MAX + 1) * double(max)) + 1; 
} 
​
int main()
{
 cout << Random(20) << endl;
 cout << Random(20) << endl;
 cout << Random(20) << endl;
 cout << Random(20) << endl;
 cout << Random(20) << endl;
 cout << Random(20) << endl;
}

运行即可发现随机数的生成可以满足1秒内多个不同随机数的要求,作为对比rand+srand运行同样的main函数代码随机数生成相同。

相关文章

  • 精度更高的随机数生成函数 rand_s

    (简书处女写) 此方法只适用于WINDOWS下 rand() 结合 srand() 函数可以有效地获取随机数序列 ...

  • 生成随机数

    两个C函数 rand()函数生成的随机数是伪随机数,所谓伪随机数,指的是程序每次运行,生成的随机数都是不变的,生成...

  • Python Random库的使用

    random库用于生成随机数 基本随机数函数: seed(), random() 扩展随机数函数: randint...

  • 随机数 arc4random_uniform

    Objective-C 中有个arc4random()函数用来生成随机数,但是这个函数生成的随机数范围比较大,需要...

  • arc4random_uniform

    Objective-C 中有个arc4random()函数用来生成随机数且不需要种子,但是这个函数生成的随机数范围...

  • 利用arc4random_uniform()产生随机数

    Objective-C 中有个arc4random()函数用来生成随机数且不需要种子,但是这个函数生成的随机数范围...

  • Excel怎么生成随机数?

    Excel怎么生成随机数?如何生成指定范围内的随机数呢?可以在Excel中使用函数,生成随机数。 1、在单元格中输...

  • IOS产生随机数的方法

    Objective-C 中有个arc4random()函数用来生成随机数且不需要种子但是这个函数生成的随机数范围比...

  • PHP---------生成随机数,日期时间函数

    常用函数 1.生成随机数 rand(); 生成随机数,不能控制在范围之内: echo rand(); 例题: 显示...

  • C++随机数

    C++ 随机数 在许多情况下,需要生成随机数。关于随机数生成器,有两个相关的函数。一个是 rand(),该函数只返...

网友评论

      本文标题:精度更高的随机数生成函数 rand_s

      本文链接:https://www.haomeiwen.com/subject/pllisttx.html