A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋佳强 中级黑马   /  2014-7-4 23:03  /  833 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

想和大家交流一下这个问题
大家看看吧。相互交流疑问的思考成果。
无限大小

  C语言如何表示无限大小,NAN?redis里面这么搞的:

static double R_Zero, R_PosInf, R_NegInf, R_Nan;   

/* Double constants initialization */   

R_Zero = 0.0;   

R_PosInf = 1.0/R_Zero;   

R_NegInf = -1.0/R_Zero;   

R_Nan = R_Zero/R_Zero;   



  简单测试:

#include <stdio.h>   



int main()   

{   

    static double R_Zero, R_PosInf, R_NegInf, R_Nan;   

    /* Double constants initialization */   

    R_Zero = 0.0;   

    R_PosInf = 1.0/R_Zero;   

    R_NegInf = -1.0/R_Zero;   

    R_Nan = R_Zero/R_Zero;   



    printf("R_Zero  : %lf\n"

           "R_PosInf: %lf\n"

           "R_NegInf: %lf\n"

           "R_Nan   : %lf\n",

           R_Zero, R_PosInf, R_NegInf, R_Nan);



    return 0;

}



  结果如下:

[heidong@HEIDONGVM tmp]$ ./z

R_Zero  : 0.000000

R_PosInf: inf

R_NegInf: -inf

R_Nan   : -nan



  果然神奇。

浮动数与0比较

  大学时候,老师教导我们,浮动数不要与0比较,因为浮点数在计算机里面表示的是近似值。所以如果浮动数要与0做比较就用·< 0.000001·这种龌蹉的方式,明明是0,却要搞个神马0.000001出来。现在我们可以这么来稿了:

#include <stdio.h>   



int main()   

{   

    static double R_Zero, R_PosInf, R_NegInf, R_Nan;   

    /* Double constants initialization */   

    R_Zero = 0.0;   

    R_PosInf = 1.0/R_Zero;   

    R_NegInf = -1.0/R_Zero;   

    R_Nan = R_Zero/R_Zero;   



    printf("R_Zero  : %lf\n"

           "R_PosInf: %lf\n"

           "R_NegInf: %lf\n"

           "R_Nan   : %lf\n",

           R_Zero, R_PosInf, R_NegInf, R_Nan);



    double a = 1.0;

    double b = 1.0;



    if(a-b == R_NegInf) {

            printf("%lf - %lf != 0\n", a, b);

    }else{

            printf("%lf - %lf == 0\n", a, b);

    }

    return 0;

}



  结果如下:

[heidong@HEIDONGVM tmp]$ ./z

R_Zero  : 0.000000

R_PosInf: inf

R_NegInf: -inf

R_Nan   : -nan

1.000000 - 1.000000 == 0



以后就可以用R_NegInf这种方式和0比较了。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马