Я написал следующий код:C Программирование - Anomaly поведение в то время цикла для состояния поплавковой
#include <stdio.h>
int main()
{
float x = 1.1;
printf("%s\n", "Hello!");
while (x == 1.1)
{
printf("%s\n", "Hey there!");
printf("%f\n", x);
x = x - 0.1;
}
printf("%s\n", "Bye!");
return 0;
}
Однако выход был (который я предполагаю, что не ожидал):
[email protected]:/mnt/d/Codes/LetUsC$ gcc C04Ag.c
[email protected]:/mnt/d/Codes/LetUsC$ ./a.out
Hello!
Bye!
Чтобы проверить, он принимает условие плавания или нет, я написал этот код:
#include <stdio.h>
int main()
{
float x = 1.1;
printf("%s\n", "Hello!");
while (x >= 1.0)
{
printf("%s\n", "Hey there!");
printf("%f\n", x);
x = x - 0.1;
}
printf("%s\n", "Bye!");
return 0;
}
И я получил результат, как я ожидал.
[email protected]:/mnt/d/Codes/LetUsC$ gcc C04Ag.c
[email protected]:/mnt/d/Codes/LetUsC$ ./a.out
Hello!
Hey there!
1.100000
Hey there!
1.000000
Bye!
Итак, мой вопрос, , что я делаю неправильно в первом коде?
UPDTATE: Только что выяснил, как исправить эту ошибку. Добавив условие то время как, как это: while (x == 1.1f)
@kaylum: Спасибо! Просто понял, что случилось. Просто добавили условие, подобное этому: 'while (x == 1.1f)' – aps120797
ну, нет. проблема заключается в сравнении значений с плавающей запятой для равенства. поплавки всегда приблизительны, поэтому проверки равенства часто терпят неудачу. – Jasen