Skip to content

C语言学习笔记(一)

Posted in 每刻,知识分享

实际上已经积攒了相当多的笔记了。。不过发大长篇似乎不太好?

浮点数有效数字问题

//
// Created by Melody on 16-1-28.
//
#include
int main(){
float a,b;
b=2.0e20+1.0;
a=b-2.0e20;
printf("%f\n",a);
return 0;
}

程序输出结果极其诡异
4008175468544.000000
从小数点就可以看出来,C float能处理的有效数字为六位。而b后所接e为20,注定了计算会出错。

数据类型修改,占位符修改,能产生非常有趣的结果。

实际上,C语言在这一点上还是比较蛋疼,数据类型按照系统平台大小有所不同,推荐使用sizeof函数,直接查看大小。Sizeof(int)这样。而对于各种奇葩类型的最大值不清楚也不打紧,因为C的头文件limits.hfloat.h中包含了这些大小限制的详细信息,有相对应定义的系统常量,把这两个头文件include进去然后常量挨个打印就好。这些系统敞亮

以下是一个浮点值上溢的例子


#include
int main(){
float toobig=3.4e38;
printf("%e\n",toobig);
return 0;
}
输出3.4e38
#include
int main(){
float toobig=3.4e38*100;
printf("%e\n",toobig);
return 0;
}

输出inf,这是编译器定义的“无穷大”。

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *