zoukankan      html  css  js  c++  java
  • 随机数

    如何用计算机知识求π

    我们做大量的随机实验,最终落在圆内部的次数除以总次数再乘以 4 得到的值,应该接近圆周率 π。随机次数越多,所得到的数值越接近 π。

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        int i,n = 0, m = 0;
        for (i = 0; i < 100000000; i++) {
            double x = 1.0 * rand() / RAND_MAX;
            double y = 1.0 * rand() / RAND_MAX;
            if (x * x + y * y <= 1.0) m += 1;
            n += 1;
        }
        printf("%lf
    ", 4.0 * m / n);    
        return 0;
    }
    

    真随机&伪随机

    真随机其实并不难理解,我们以掷骰子为例,掷出 1~6 点的概率均为 1/6,如果我问你,上一次掷出的点数是 4,那么下一次掷出 6 点的概率是多大?你会发现,依然是 1/6,我们称这两次掷骰子的事件是相互独立的,上一次的结果和下一次之间没有必然联系。

    什么叫做伪随机,因为一旦要是上一个随机函数的值确定了,下一个数字也就确定了,而纯正意义上的真随机,应该是前后两次出现的数字是两次独立事件,没有任何关系。

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        printf("%d
    ", rand() % 1000); // 永远输出固定值
        srand(time(0));
        printf("%d
    ", rand() % 1000); // 每次运行都不同
        return 0;
    } 
    

    上述代码,第一个没有产生随机数种子,所以运行结果始终不会变,第二个因为有随机数种子,所以每次运行结果都是会改变的。

    思考题:设计迷你随机函数

    设计一个循环过程,循环 100 次,以不太明显的规律输出 1~100 中的每个数字。
    要求 1:规律尽量不明显。
    要求 2:只能使用循环和最基本的运算,不允许超前使用数组。

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
    	int i;
    	for(i=0;i<100;i++)
        printf("%d	", rand() % 100); // 永远输出固定值
        
        return 0;
    } 
    

    总结

    1. 计算机中都是伪随机函数,也就是说,下一次的随机值,跟本次的随机值是相关的。
    2. 使用 srand 函数设置随机种子,也就是设置伪随机过程中的第一个起始点的位置。
  • 相关阅读:
    Base64字符串在传递过程中加号被转成空格
    IIS无法启动,应用程序池自动关闭,应用程序池XXXX将被自动禁用 解决方案之一
    我要写程序我要写程序
    react native项目改名(仅针对android)
    webpack之html-webpack-plugin的使用
    webpack之React开发环境配置
    webpack之webpack-dev-server的使用
    html2canvas截图空白问题
    webpack源码分析——参数初始化
    webpack源码分析——配置调试环境
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/12581201.html
Copyright © 2011-2022 走看看