设为首页 加入收藏

TOP

C基础 寻找随机函数的G点(二)
2017-10-12 17:39:10 】 浏览:4200
Tags:基础 寻找 随机 函数 G点
n
r; }

 

 添加 了 取余看是否, 影响G点 测试结果

  

发现G点没有变化. 

可以有推论: rand() 周期不随着 二次 mod取余而改变.

因而可以放心 mod使用 伪随机函数. G点还是那么大.

 

3. 最后, 赠送一个常用的 [min, max] 之间的随机函数

/*
 * 返回 [min, max] 区间的随机函数
 * min    : 起始位置
 * max    : 结束位置
 *        : 返回[min, max]区间之内的位置
 */
extern int random(int min, int max);

/*
 * 返回 [min, max] 区间的随机函数
 * min    : 起始位置
 * max    : 结束位置
 *        : 返回[min, max]区间之内的位置
 */
int 
random(int min, int max) {
    assert(min < max);
    // 正常情况
    return rand() % (max - min + 1) + min;
}

 

测试demo 代码 结构如下 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>

/*
 * 返回 [min, max] 区间的随机函数
 * min    : 起始位置
 * max    : 结束位置
 *        : 返回[min, max]区间之内的位置
 */
extern int random(int min, int max);

/*
 * C 基础, 使用随机函数
 */
int main(int argc, char* argv[]) {

    int min = -5, max = 5;
    int i = 0;

    // 开始统一 初始化种子
    srand((unsigned)time(NULL));

    while(i < 100) {
        printf("%3d ", random(min, max));
        if (++i % 10 == 0)
            putchar('\n');
    }

    system("pause");
    return 0;
}

/*
 * 返回 [min, max] 区间的随机函数
 * min    : 起始位置
 * max    : 结束位置
 *        : 返回[min, max]区间之内的位置
 */
int 
random(int min, int max) {
    assert(min < max);
    // 正常情况
    return rand() % (max - min + 1) + min;
}

 

 测试结果是

基本比较稳定. 一切都在预料之中.

总结 本文 得出两个 推论

  a. rand()伪随机函数, 存在G点. 并且可以找到

  b. G点 不随着 二次 mod 取余改变.

 

后记

  错误是难免的, 预祝明天愉快~~

  

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ubuntu14安装emacs 下一篇[转]什么是Pro*C/C++,嵌入式SQL..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目