[英]division-by-zero error?
我试过运行此代码:
int x = 0;
double y = 1/2;
if (y <= x || y/x < 1)
y++;
printf("%.2f", y);
输出为1.00
,这让我有些惊讶。 我以为第一个表达式(y <= x)
是假的,因为这是||
运算符C还必须计算第二个表达式(y/x < 1)
,该表达式涉及除以零。 但是为什么没有出现任何错误?
y
实际上是0:
double y = 1/2;
上面是整数除法,所以结果是0。您想要的是:
double y = 1.0/2.0;
赋值double y = 1/2;
产生y
0。 因此||
是快捷方式(表示的第二部分不被评估)。
如果您打算y为0.5,请输入:
double y = 1/2.0;
首先,谢谢。 该问题非常重要,但我还没有面对。
首先,“ y = 1/2”行产生“ y = 0”,其次,“如果条件y / x”的均值为0/0,则“结果不确定”。 但是在“ ||”中 如果Left Argument为True,则不需要测试其余Argument(condition)。 因此它跳转到“ y ++”,结果是1.00。
但是如果我们写if(y / x <1 || y <= x)
比给出“异常程序终止”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.