读书人

有一道题目一直很难忘解决办法

发布时间: 2012-02-19 19:43:38 作者: rapoo

有一道题目一直很难忘
Q.下面的程序输出什么?

int main(){
float a = 3.14;
if(a > 3.14){
printf( "true ");
}else{
printf( "false ");
}
return 0;
}


[解决办法]
if(a > 3.14) //会出现3种情况,这样写没有意义
[解决办法]
浮点数表示会有截断误差。
if (a > 3.14)
a是float型,3.14是double型,两者精度不一样,具体谁大要用二进制表示出来才知道的
所以一般比较浮点数是否相等都用相减取绝对值小于某个误差范围
if (fabs(a - 3.14) < 1e-6)
[解决办法]
浮点数表示的数其实是不精确的,总是有误差的,一开始运算误差就会互相累加,所以浮点数无法直接比较,只能在一定精度内进行判断。

[解决办法]
UP二楼的说得很明白了.
[解决办法]
float a = 3.14;
if((a - 3.14)> 1e-6)
{
printf( "true ");
}
else
{
printf( "false ");
[解决办法]
二楼的说得很明白,

实际上像你这么写,哪一种情况都可能发生。
[解决办法]
不说,还真的不知道哦~
[解决办法]
#include "float.h "
int _tmain(int argc, _TCHAR* argv[])
{
float a = 3.14;
if(a > 3.14 + FLT_EPSILON){
printf( "large ");
}
else if (a < 3.14 + FLT_EPSILON)
{
printf( "equre ");
}
else{
printf( "less ");
}



return 0;
}

读书人网 >C++

热点推荐