Member 13845169 Ответов: 3

Почему петля не останавливается ? (пожалуйста помочь)


#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, то это работает идеально.

Что я уже пробовал:

Пожалуйста, Помогите Мне... Не могу понять.......

3 Ответов

Рейтинг:
2

KarstenK

Почему бы вам не использовать отладчик или не сделать такой вывод?

while(a != b){
		puts("Not Equal.");
		a = a + 0.1;
		printf("a = %f", a);
	}
Вы бы это видели :-о


Рейтинг:
1

Patrice T

Цитата:
Почему петля не останавливается ?

Потому что арифметика с плавающей запятой не является точной.
0.1-это только приближение, так что 3.0 + 0.1 + 0.1 + 0.1 + 0.1 нет 3.4, есть дрейф.
Арифметика с плавающей запятой - Википедия[^]


Member 13845169

есть ли какие-нибудь библиотеки c плавающей запятой, чтобы исправить это?...