循环为什么不停止? (请帮忙) [英] Why the loop doesn't stop ? (please help)

查看:91
本文介绍了循环为什么不停止? (请帮忙)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include <stdio.h>
int main(void){
	double a = 3.0, b = 3.4;
	while(a != b){
		puts("Not Equal.");
		a = a + 0.1;
	}
	puts("Now Equal");
	getchar();
	return 0;
}





//如果b = 3.1或3.2,它的效果非常好。



我尝试了什么:



请帮帮我...不明白..... ..



// If b = 3.1 or 3.2 it works perfectly.

What I have tried:

Please Help Me Out... Can't understand.......

推荐答案

Quote:

为什么循环不会停止?



因为浮点运算不精确。

0.1只是近似值,所以3.0 + 0.1 + 0.1 + 0.1 + 0.1不是3.4,有一个漂移。

浮点运算 - 维基百科 [ ^ ]


欢迎来到浮点! />
请参阅:

每个计算机科学家应该知道浮点运算 [ ^ ]。

浮点指南 - 比较 [ ^ ]。
Welcome to floating point!
See:
What Every Computer Scientist Should Know About Floating-Point Arithmetic[^].
The Floating-Point Guide - Comparison[^].


为什么你不使用调试器,或做出类似的输出?

Why arent you use the debugger, or made some output like that?
while(a != b){
		puts("Not Equal.");
		a = a + 0.1;
		printf("a = %f", a);
	}

你会看到它:-O


这篇关于循环为什么不停止? (请帮忙)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆