zoukankan      html  css  js  c++  java
  • 数值计算:计算机精度

    数值计算:计算机精度

    机器数

    由于计算机的储存空间有限,所以对于一个实数,有时候存储的只是它的近似值

    其中为尾数,是个有限位数二进制数,其大小为,整数称为阶码。当一个实数的位数过多,其便会被舍去一部分精度

    计算机浮点数

    在以32位表示单精度实数的计算机中,阶码用8位表示,位数用24位表示,其表示的范围为,有6位的十进制精度值

    对于64位表示的双精度值,用11位表示阶码,用53位表示尾数,其表示的范围为,有16位的十进制精度值

    计算误差

    在计算机的计算过程中,由于本身的存储的数值可能只是是近似值,而且中间结果可能会有舍入,导致误差不断地增大,例如我们计算n个0.1相加的和(n=10, 100, 1000, ...),代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
        int n = 1;
        for(int j = 0; j < 9; j++){
            n = n * 10;
            float ans = 0;
            for(int i = 0; i < n; i++){
                ans += (1 / 10.0);
            }
            printf("n= %d
    ans= %f
    ", n, ans);
        }
    
        system("pause");
    }
    

    结果为

    n 计算结果 正确结果
    10 1.000000 1
    100 10.000002 10
    1000 99.999046 100
    10000 999.902893 1000
    100000 9998.556641 10000
    1000000 100958.343750 100000
    10000000 1087937.000000 1000000
    100000000 2097152.000000 10000000
    1000000000 2097152.000000 100000000

    在计算过程中由于中间的结果不断被舍入,所以误差越来越大,到了最后由于0.1相对于中间结果来说太小了,所以加数0.1也被省略了,以至于到了最后即使n增大, 计算结果也是不变的。

  • 相关阅读:
    小程序上传多张图片
    小程序倒计时遇到的问题
    taro小程序展示富文本
    taro小程序地址选择组件
    构建基于Suricata+Splunk的IDS入侵检测系统
    SQL注入学习资料总结
    常见WAF绕过思路
    业务安全漏洞挖掘归纳总结
    细说验证码安全 —— 测试思路大梳理
    验证码安全那些事
  • 原文地址:https://www.cnblogs.com/Vincent-Bryan/p/6438194.html
Copyright © 2011-2022 走看看