c++前辈进~~

来源:百度知道 编辑:UC知道 时间:2024/05/25 05:54:58
float a=1.1,b=2.2,c=3.3;
cout<<a+b>c<<endl;
为什么输出的是1而不是0啦,那个高手解释一下,谢谢

这个是我给你的分析:
Compiling...
wyx.cpp
D:\C++\temp\w.cpp(6) : warning C4305: 'initializing' : truncation from 'const double' to 'float'
D:\C++\temp\w.cpp(6) : warning C4305: 'initializing' : truncation from 'const double' to 'float'
D:\C++\temp\w.cpp(6) : warning C4305: 'initializing' : truncation from 'const double' to 'float'

wyx.obj - 0 error(s), 0 warning(s)
首先看这个警告,编译器会自动把float转化成double,这个过程中,会损失精度.
看这个程序可以说明:
#include <iostream>
using namespace std;

int main()
{
float a=1.1,b=2.2,c=3.3;
cout<<(a+b-c)<<endl;
return 0;
}
结果:
1.19209e-007
Press any key to continue
就是0.000000119209
很接近,但是精度损失导致了程序的错误.
一般判断两个float或者double相等用 a-b<=1e-6 就行了

因为符点数是无法这样进行比较的,好像是用函数来进行符点数比较大小的.
下面的程序可以验证用:
#include <iostream.h>
void m