永发信息网

float 精度问题

答案:3  悬赏:20  手机版
解决时间 2021-05-05 13:00
  • 提问者网友:别再叽里呱啦
  • 2021-05-05 08:07

图中代码a=0.1时就是no.

把图中代码a改成0.5就是yes.了

float型变量在这里存在什么缺陷呢?

顺便问一下Visual Studio2008中调试c++文件的F5和ctrl+F5有什么区别?有时候用F5会直接跳出,而用ctrl+F5则不会

最佳答案
  • 五星知识达人网友:山有枢
  • 2021-05-05 09:23

因为计算机是用二进制0和1存储信息的,对于十进制的小数,需要先转成二进制才能存入计算机(整数部分除2取余,小数部分乘2取整,这个知道吧),在十进制0.1和0.9之间(包括0.1和0.9)的小数,转换成二进制后只有0.5才能转换成有限小数,而其它的只能转换成无限小数,float和double根据其精度来对该无限小数进行截取存入计算机,这样就出现了你看见的情况


改成这样就可以了:


#include<stdio.h>
main()
{
float a=0.1;
if(a==(float)0.1) printf("yes.\n");
else printf("no.\n");
}

全部回答
  • 1楼网友:鱼忧
  • 2021-05-05 11:09
float是不能用来比较的 是不准确的 只是估计值 存在截断错误 比较的话还得用int型
  • 2楼网友:野味小生
  • 2021-05-05 09:55

不得不说你提的问题相当不错,但是我也没注意到这个问题

不过你顺便问一下的问题如果你用的是C语言,可以最后加一个getchar();不知道VS识别不。

CTRL按住就是不调试,在C#语句里最后都是加上一个Console.ReadKey();这样的话就是缓冲一下,等你按任意键才关闭!

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯