您的位置:首页 > 编程语言 > C语言/C++

c语言重温笔记(2)--数据类型

2013-07-17 08:41 211 查看
今天谈谈数据类型,算是比较基础的问题,至于具体的内容,详见

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以内。







不断学习,不断汇总问题中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: