Intel的C++ Compiler为什么要这样?

弟十六 2004-10-13 08:13:46
假设有两个浮点数如下:

float fVar1( 2.5), fVar2( 2.7);

那么对于的逻辑表达式

if( fVar1 == fVar2)

这一句在编译时会出警告。
如果改成下面这样则不会发出警告:

if( ( long)fVar1 == ( long)fVar2)

表面上看着舒服了,但这是建立在程序不能正常运行的基础上的!

float fVar1( 2.5), fVar2( 2.7);

if( fVar1 == fVar2)
std::cout << "fVar1 equal fVar2. " << std::endl;
else
std::cout << "fVar1 isn't equal fVar2. " << std::endl;

if( ( long)fVar1 == ( long)fVar2)
std::cout << "fVar1 equal fVar2. " << std::endl;
else
std::cout << "fVar1 isn't equal fVar2. " << std::endl;

运行结果:
fVar1 isn't equal fVar2.
fVar1 equal fVar2.

微软的编译器就不存在这个问题,Intel的C++ Compiler为什么会这样?我不明白!
看着一行行冒出的警告实在是不爽,那么除了#progma warning( disabel : xxxx)还有什么别的办法呢?
...全文
375 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
弟十六 2004-10-18
  • 打赏
  • 举报
回复
按icecools(浮生若梦)说的方法解决了问题,同时谢谢各位的参与。
to blas(): 当然不行了!
whoho 2004-10-14
  • 打赏
  • 举报
回复
因为浮点数比较是危险的
浮点数相等的可能性比较小,因为计算误差
警告是必要的,但如果你确定你能够形成相等的条件
可以把警告禁用,比较完以后启用
对MS的编译器,可以用以下代码
Intel C++ compiler是完全兼容MS代码的
#pragma warning(disable:number) //你把出错信息里面的waring编号放在这里就可以了
{
float f1, f2;
f1=f2=2.3;
bool eq = (f1==f2);
}
北极猩猩 2004-10-14
  • 打赏
  • 举报
回复
给你警告是为了避免你犯错误。

因为浮点数之间进行直接的相等比较本身就是错误的!

应该向楼上所说的来比较两个浮点数是否相等。

警告多了不是坏事,只有将程序中的警告都消除,才能保证你的程序不出现隐藏的灾难
icecools 2004-10-14
  • 打赏
  • 举报
回复
if(fabs(fVal1 - fVal2) < 0.00001)
{
//equal
}
  • 打赏
  • 举报
回复
icc 在什么地方下的,我找了几个都下不了,郁闷
cxjddd 2004-10-14
  • 打赏
  • 举报
回复
这里有一个浮点数比较的讨论
http://community.csdn.net/Expert/topic/3365/3365436.xml?temp=.7751734
blas 2004-10-13
  • 打赏
  • 举报
回复
把if((long)fVar1 == (long)fVar2)改为if((double)fVar1 == (double)fVar2)试试看!
kerbcurb 2004-10-13
  • 打赏
  • 举报
回复
浮点数一般不这样比较,
浮点数的比较方法是相减取绝对值然后和一个很小的正数比较
fire_up 2004-10-13
  • 打赏
  • 举报
回复
楼主打开汇编,看看汇编代码比较一下有什么不同。
hcj2002 2004-10-13
  • 打赏
  • 举报
回复
问题可能处在编译器对float类型的数据 比较的内部处理上。
纪俊 2004-10-13
  • 打赏
  • 举报
回复
equal的含义不同吧
具体的为什么我也不太清楚...
/////////////////////////////////////////////////////////////////////
欢迎大家使用编程文档手册V3.5,编程辅助类软件

集编程文档的收集、查询、浏览、编辑等功能于一体的辅助编程类软件。通过日积月累,相信本软件将给广大程序开发人员以及编程爱好者们带来很大的帮助。

下载地址:
天空软件站:http://www.skycn.com/soft/11906.html
华军软件园:http://www.onlinedown.net/soft/6496.htm
详细说明与注册地址:http://www.sharebank.com.cn/soft/soft_view.php?id=10648
官方网站:http://promanual.jijun.org
工作室站点:http://www.jijun.org

欢迎大家使用,欢迎大家多多指教。
/////////////////////////////////////////////////////////////////////
弟十六 2004-10-13
  • 打赏
  • 举报
回复
我用的是8.1。
blas 2004-10-13
  • 打赏
  • 举报
回复
没有warning啊!我用的是intel cpp compiler 8.0

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧