zoukankan      html  css  js  c++  java
  • C语言浮点类型有效位(float, double,long double)

    为什么叫浮点类型:

    一个数可以用指数表示,但可以不同小数位多种形式来表示,小数可以浮动。

    在 C 语言中,实数是以指数的形式存放在存储单元的。
    一个实数表示为指数可以不止一种形式,
    如 4.3242 可以表示为 
    4.3242*10^00.43242*10^10.043242*10^2432.42*10^-2 等,
    他们代表同一个值。
    可以看到小数点的位置是可以在 43242 几个数字之间浮动的,
    只要在小数点位置浮动的同时改变指数的值,
    就可以保证它的值不会改变。由于小数点的位置可以浮动,
    所以实数的指数形式称为浮点数。

    规范化写法:小数点前面为0

    规范化的指数形式:
    在指数形式的多种表示方式中把小数部分中小数点前的数字为 0,
    小数点后第 1 位数字不为 0 的表示形式称为规范化的指数形式,
    如 0.43242*10^1 就是 4.3242 的规范化的指数形式。
    一个实数只有一个规范化的指数形式。

    浮点数类型包括

     float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。

    在存储时,系统将实型数据分成小数部分和指数部分两个部分、分别存储。

    如 3.14159 在内存中的存放形式如下:

    0.314159  101

    算6个有效位

    这个决定了精度:

    float:有效位6-7位
    double:15-16
    long double:18-19
    当要表示一个精确的数字时候非常重要
    否则可能丢失精度。

    例子:

        float a = 123456789;
        float b = 1234567890;
        float c = 12345678900;
    
        printf("
    %f
    ",a);
        printf("
    %f
    ",b);
        printf("
    %f
    ",c);
    
    输出:
    123456792.000000
    
    1234567936.000000
    
    12345678848.000000
    只有前面7位是精确的后面的数据就未必了。
  • 相关阅读:
    反转链表 16
    CodeForces 701A Cards
    hdu 1087 Super Jumping! Jumping! Jumping!(动态规划)
    hdu 1241 Oil Deposits(水一发,自我的DFS)
    CodeForces 703B(容斥定理)
    poj 1067 取石子游戏(威佐夫博奕(Wythoff Game))
    ACM 马拦过河卒(动态规划)
    hdu 1005 Number Sequence
    51nod 1170 1770 数数字(数学技巧)
    hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
  • 原文地址:https://www.cnblogs.com/straybirds/p/14806653.html
Copyright © 2011-2022 走看看