关于浮点数实际值和默认值

来源:互联网 发布:计算机程序员考试试题 编辑:程序博客网 时间:2024/05/19 00:40

1.1程序如下 


1.2.结果如下:


预期:1.2F与1.2是相等的,显示后面的小数应该全是0。实际:1.2F实际是1.2000000476837158…..,并不是精确的1.2,而1.2F也与1.2不相等。原因:(1)float的有效数字只有8个,也就是1.2F输出20个位时只能保证前8位(1.2000000)是精确地,后面12位都是不精确的。

(2)由于C语言默认小数是double类型的,所以1.2是double类型的数据,当然与1.2F这个float类型的数据不相等。



程序如下:

 

2.2结果如下:

 

预期:1.3+04应该是等于1.7

实际:一个double型的1.3一个double型的0.4结果不等于1.7

原因:

计算机里的浮点数没有笔算那么精确,它的1.0也许是0.9999999993或者是1.00000000004,不能够做精确的相等判断,所以不能写1.4+0.3==1.71.4+0.3的结果除非在取有效数字的时候正好近似成1.7,否则就不会等于1.7了,应该相对自己所关注的有效数字,允许多几位有效数字的偏差,譬如这个程序中,当1.4+0.31.7相差在0.00001以内时可以认为他们相等。具体的允许偏差的位数应该视情况而定。


0 0
原创粉丝点击