• rocedu
    2020-02-02
    rand实现用的公式给一下,更能说明伪随机性。

    作者回复: int __cdecl rand (
            void
            )
    {
            _ptiddata ptd = _getptd();

            return( ((ptd->_holdrand = ptd->_holdrand * 214013L
                + 2531011L) >> 16) & 0x7fff );
    }

    
     2
  • Geek_Andy_Lee00
    2020-01-14
    老师您好,为啥我的结果里面有重复的数字呢

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

    int main() {
        int i, j;
        srand(time(0));    //初始化随机数种子
        for (i = 1, j = 1; i <= 100; i++, j++) {
            printf("%d\t", 1+rand() % 100);    
            if (j % 10 == 0) printf("\n");
        }
        system("pause");
        return 0;    
    }
    展开

    作者回复: 当然会有重复数字了,因为你对rand的结果取余了。rand的循环长度可能很大,可取余100以后,就很容易出现重复啊。就比如101和100001取余100,不都是1么。

     1
     1
  • 栾~龟虽寿!
    2020-01-12
    老师很厉害,才4节课你就会看到,老师想说,学编程,为做事高效,为生活添彩,如果你不断重复,成功概率会变化。

    作者回复: d(^_^o) 你这总结的太棒了,我得记下来!

    
     1
  • rocedu
    2020-02-03
    "记住,计算机就是你的小帮手了,以后的日子里,请动用你的智力,使用它的体力!"这真说出了为何人人都需会点编程。

    作者回复: d(^_^o)

    
    
  • 不便明言
    2020-01-23
    老师,我的输出都是一个数字,是不是啊没有验延时还是啥原因
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    int main() {
        //printf("%d\n", rand() % 1000);
        int i,j;
        for(i=0;i<100;i++)
        {
          for(j=0;j<10;j++)
          {
           srand(time(0));
           printf("%d\t", rand() % 100);
          
          }
        printf("\n");
        }
        return 0;
    }
    展开

    作者回复: 对,time(0)这个方法每次返回与当前秒相关的一个数字,也就是说如果你的程序在1秒内运行完了,那么你每次rand之前设置的随机种子都是一个值,所以输出的就是一个值了。其实随机种子设置一次即可。你把那句话放到住函数的第一句再试试。

     1
    
  • 信念
    2020-01-22
    我得出的结果为3.141664

    作者回复: d(^_^o)

    
    
  • 王建
    2020-01-18
    设计迷你随机函数有答案吗,我没有思路!

    作者回复: 有统一的答疑文章,往后看。

    
    
  • 潮汐
    2020-01-15
    int num;
    for (int i = 1; i <= 100; i++) {
        num = rand() % 100;
        printf("%d\n", num);
    }
    有两个问题请教老师。
    1、这里只能随机100数,并不能保证0-100的数字都输出一遍,存在重复数据问题,是思考题的对应的思路(期望实现方式里不使用数组)吗?
    2、文中说到rand(),如果没有传入随机种子,返回值不应该是一直不变吗?我也试过,单独的执行确实是不变的。但是放在循环里,为什么每次都取到了不同的值呢?
    展开

    作者回复: 这个是你的理解有偏差了。随机种子是设置第一个状态,不设置随机种子,也会有一个默认的初始状态。rand的功能,是获得下一个随机值。执行100次,就是向后依次性的得到伪随机序列中的100个值。跟是否设置随机种子无关。设置了随机种子,是保证前后两次程序执行的结果不同。仔细理解一下这段。Y(^_^)Y

    
    
  • 潮汐
    2020-01-15
    double x = 1.0 * rand() / RAND_MAX;
    老师为什么我这里打印这个值,范围是 0.474500 - 0.474599 ?

    作者回复: 设置随机种子了么?多执行几次随机程序看看结果呢?

    
    
  • 一步
    2020-01-15
    为什么语言层面实现不了真随机呢?

    作者回复: 因为计算机的每个计算过程,都是一个固定的且确定的过程。也就是说,由这些固定过程所生成的所谓随机值,也都是个固定值。只是这个生成的固定值,我们事先不知道是几,但不代表,它是真随机。你需要好好理解一下真随机,所谓真随机,是说产生每个数字的概率都相等。

    
    
  • 一步
    2020-01-14
    为什么有的语言的随机函数不用设置种子,每次获取到的随机数也是不一样的?(语言内部做封装了?比如js的Marh.random())

    作者回复: 嗯,虽然我没看过他底层的实现。不过,我可以肯定的告诉你,js也是伪随机,而你的猜想,是一个十分靠谱且合理的猜想!d(^_^o)

    
    
  • 阿阳
    2020-01-14
    真心话,老师太厉害了,高手!一个计算圆周率的问题,把之前讲的判断和循环还有随机数相关知识,讲的清清楚楚。一个老程序员学习后,深有感触。

    作者回复: d(^_^o)

    
    
  • 潮汐
    2020-01-12
    让计算机去做计算机擅长做的事。重复,计算…
    通过圆与正方形的面积关系,通过重复实验的统计结果去,结合起来得出圆周率的值,前人的智慧!
    
    
  • 奔跑的八戒
    2020-01-11
    例如,上面我们自己做出来的 6 个长度的伪随机序列,如果随机种子设置为值 1,我们得到的值依次是 635421,如果设置为值 3,那么我们将依次得到 542163。
    老师,这个怎么弄?给点提示。

    作者回复: 这个只是举个例子,说明伪随机序列其实是一个固定序列。

    
    
  • 许童童
    2020-01-11
    不错,不错,这点课对我这个老程序员收获也很大。

    作者回复: Y(^_^)Y

    
    
  • 梅利奥猪猪毛丽莎肉...
    2020-01-11
    谢谢老师,搞懂随机种子了,计算π的值很秀,当中还想了下,用了勾股定理,斜边长度正好是圆内部的那根弦,所以属于在圆内,否则在圆外,再根据一开始推导的公式算出π,很完美

    作者回复: d(^_^o)

     3
    
我们在线,来聊聊吧