c语言重温笔记(2)--数据类型
2013-07-17 08:41
211 查看
今天谈谈数据类型,算是比较基础的问题,至于具体的内容,详见
http://see.xidian.edu.cn/cpp/html/437.html
里面介绍的挺全面的, 我也就不多说明了。
下面讲讲几点常见错误。
看下输出结果。发现判断语句打印了 != 这句。 这确实有点有违常理,明明运算后结果一样,但是比较后就是不一样。
再看最后一个printf语句,去掉精度限制,完整打印。 发现浮点数在不同运算过程中,不同的运算步骤所带来的舍入过程是不一样的,舍入误差的积累造成最终结果不相等。
所以,一般两个浮点数进行比较时,在某个精度范围类相等,即视为相等。
如: if (abs((x+y) - z)< D) 其中,精度范围控制在D以内。
不断学习,不断汇总问题中。
http://see.xidian.edu.cn/cpp/html/437.html
里面介绍的挺全面的, 我也就不多说明了。
下面讲讲几点常见错误。
2.数据类型
2.1 浮点数精度问题
#include <stdio.h> #include <stdlib.h> void main() { float x, y, z; x = (float)123.456; y = (float)654.321; z = (float)(123.456 + 654.321); if ( x+y == z) printf("x(%.3f)+y(%.3f) == z(%.3f)\n",x,y,z); else printf("x(%.3f)+y(%.3f) != z(%.3f)\n",x,y,z); printf("x(%f)+y(%f) != z(%f)\n",x,y,z); }
看下输出结果。发现判断语句打印了 != 这句。 这确实有点有违常理,明明运算后结果一样,但是比较后就是不一样。
再看最后一个printf语句,去掉精度限制,完整打印。 发现浮点数在不同运算过程中,不同的运算步骤所带来的舍入过程是不一样的,舍入误差的积累造成最终结果不相等。
所以,一般两个浮点数进行比较时,在某个精度范围类相等,即视为相等。
如: if (abs((x+y) - z)< D) 其中,精度范围控制在D以内。
不断学习,不断汇总问题中。
相关文章推荐
- C语言随堂笔记---数据类型、变量、运算符
- 【黑马程序员】C语言学习笔记之基本数据类型(六)
- C语言笔记之数据类型(一)
- C语言学习笔记-----数据类型大集合
- C语言学习笔记 C语言sizeof,return、数据类型
- c语言笔记——基本数据类型
- C语言笔记之数据类型(三)
- 6、C语言深度学习笔记--数据类型
- iOS学习笔记之-C语言基础02(关键字、标识符、注释、数据类型)
- C语言学习笔记 数据类型
- C语言笔记(数据类型)
- C语言学习笔记:01_基本数据类型
- char数据类型3-C语言学习笔记5
- C语言学习笔记(二)--从最简单的数据类型开始
- C语言笔记之数据类型(二)
- C语言提高班学习笔记 lesson1 自定义数据类型
- C语言-郝斌笔记-003数据类型
- 数据类型2-C语言学习笔记5
- 002-IDE的使用与数据类型-C语言笔记
- 〖C语言学习笔记 〗(二) 数据类型