美文网首页
精度更高的随机数生成函数 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

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