Smi*_*ory 6 c floating-point loops
我正在完成一项家庭作业,我可能会对这件事感到兴奋,所以我只是在寻求一些意见.这是基本代码:
for(x = 100; x > 0; x = x + x) {
sum = sum + x;
Run Code Online (Sandbox Code Playgroud)
有两个版本:一个x是a float,一个是int.问题是这些无限循环.
我在想,当它x是一个时int,它最终会溢出,使它小于零并且循环将停止.当xa是a时float,x将达到无穷大并且循环将是无限的.
我接近了吗?
有符号整数增加超出其限制时的行为是未定义的.所以循环可能结束或者可能是无限的.或者它可能会崩溃(或循环可能永远不会运行).或者正如一些C大师所说,恶魔可能会飞出你的鼻子 - 虽然我个人怀疑任何编译器实现者都会遇到实现鼻子恶魔功能的麻烦.
就浮点值而言,你是正确的,它将是一个无限循环.
你确实是对的,整数将溢出到负值(只要它们有符号),因此循环将结束,浮点数将坚持“+无穷大”,它总是大于除 之外的任何数字NaN。
编辑:我纠正了,该int版本确实无限循环(由于某些编译器的假设): http: //ideone.com/HZkht