情况1:
#include <iostream>
int main()
{
double d = 15.50;
std::cout<<(d/0.0)<<std::endl;
}
它编译时没有任何警告并打印 inf
。好的,C++ 可以处理除以零,( 现场观看)。
但,
案例二:
#include <iostream>
int main()
{
double d = 15.50;
std::cout<<(d/0)<<std::endl;
}
编译器给出以下警告( 现场查看):
warning: division by zero [-Wdiv-by-zero]
std::cout<<(d/0)<<std::endl;
为什么编译器会在第二种情况下给出警告?
是 0 != 0.0
?
编辑:
#include <iostream>
int main()
{
if(0 == 0.0)
std::cout<<"Same"<<std::endl;
else
std::cout<<"Not same"<<std::endl;
}
输出:
Same
原文由 Jayesh 发布,翻译遵循 CC BY-SA 4.0 许可协议
浮点除以零 由 IEEE 明确定义 并给出无穷大(根据分子的值是正数还是负数(或
NaN
为 ±0) )。对于整数,无法表示无穷大,并且语言将操作定义为具有 未定义的行为,因此编译器会帮助您尝试引导您远离该路径。
但是在这种情况下,由于分子是
double
,除数(0
)也应该提升为双精度,并且没有理由在不发出警告的情况下在这里发出警告对于0.0
所以我认为这是一个编译器错误。