3-2 浮点数的不精确与不连续

#include <stdio.h>

int main()
{
    float f=3.3f;
    float f2=123456789;
    //float与int 相同32位 32组01组合
    //float的特殊表示法带来了更大的范围同时意味着float的不连续与不精确
    printf("%.10f\n",f);
    printf("%f\n",f2);
    //float的不连续

    float b=0.1f;
    if(b==0.1){
        printf("b=0.1\n");
    }
    else
        printf("b!=0.1\n");
    //float的不精确

    printf("%.10f\n",b);

    return 0;

    /*浮点数虽然表示范围大,但是其范围并不是连续的。
    这句话的意思是,比如说1、2、3可以表示1-3的范围,但是如果我每隔一段距离表示一个数的话,那我表示的范围就会迅速扩大,比如我每隔两位表示一个数,那么尽管我依旧只可以表示3个数,但我表示的数为1、3、5,相对于表示的范围扩大到了1-5.

    而且这个每两个数所相隔的距离不是平均相等的,往往数越大间隔也越来越大。



    因为精度的问题,我们往往不用float a==float b或float a==0进行判断!
    解决办法:

    1.float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。使用BigDecimal并且一定要用String来够造。

    2.先化为整数再比较。比如23.56与23.49比较,我们化为整数,比较2356与2349大小。*/

}

在这里插入图片描述

1.int与float都是4字节,32位,及32个01的组合

2.int 的表示范围是 -2^31~ 2^31,float的表示范围是 -3.4x10^38~ 3.4x10^38

例如:1、2、3可以表示1-3的范围,但是如果我每隔一段距离表示一个数的话,那我表示的范围就会迅速扩大,比如我每隔两位表示一个数,那么尽管我依旧只可以表示3个数,但我表示的数为1、3、5,相对于表示的范围扩大到了1-5.

3.浮点数虽然表示范围大,但是其范围并不是连续的
(在1~5的范围内,你只用3个数表示1,3,5 无法表示4这个数)

4.浮点数是一种近似表示,并不能精确的使用
(特别是条件判断时)

5.由于内存表示法复杂,浮点数的运算比整数慢

原创文章 8 获赞 1 访问量 288

猜你喜欢

转载自blog.csdn.net/rororwww/article/details/105758220