wan*_*arn 9 c floating-point nan
我对下一个代码有疑问:
int main { 
double x = 0;
double y = 0/x;
if(y==1) {.....}
....
....
return 0;
}
当我在我的计算机上运行代码时,我没有遇到运行时错误,我看到了y = -nan(0x8000000000000).为什么不将运行时错误除以零?
此外,当我将第一行更改为int x = 0;
现在时,存在运行时错误.有什么不同?
Mat*_*Mat 14
你根本不能依赖这个"工作"(即一直做同样的事情,可移植),对于第二种情况,它在C中是未定义的行为,如果你的实现没有定义,它也是第一种__STDC_IEC_559__(这是我相信,这些日子很少见.
C99,§6.5.5/ 5
/运算符的结果是第一个操作数除以第二个操作数的商; %运算符的结果是余数.在这两个操作中,如果第二个操作数的值为零,则行为未定义.
你在一个案例中获得"非数字"而在另一个案例中没有获得的事实是,一个是在浮点算术中完成的,其中,在你的实现上(符合IEEE 754除以零语义),0/0给出了NaN的.
在第二种情况下,您使用整数算术 - 未定义的行为,没有预测会发生什么.
| 归档时间: | 
 | 
| 查看次数: | 12042 次 | 
| 最近记录: |