2015-08-18 4 views
-4

Эта программа, похоже, выглядит так, как будто она будет запускаться в течение одного раза, но когда я запускаю в Turbo C, вывод ничего. Может ли кто-нибудь объяснить это?Ошибка сравнения с плавающей запятой

#include<stdio.h> 
int main() 
{ 
    float x=1.1; 
    while(x==1.1) 
    { 
     printf("%f \n",x); 
     x=x-0.1; 
    } 
    return 0; 
} 
+8

Посмотрите здесь: http://stackoverflow.com/questions/588004/is-floating-point-math-broken – Inisheer

+0

Это часто ошибка: вы сравниваете float с двойным, и они могут немного отличаться (IOW, не равно), особенно в нестандартной реализации, такой как Turbo C. Обратите внимание, что последняя версия Turbo C была выпущена в 1989 году. –

ответ

0

Вы можете повторно написать условие цикла следующим образом-

while((1.0009<x)&&(x<1.10001)) 

Как потому x=1.1 в этом x никогда не точна 1.1. В более высоких десятичных знаках он может иметь другое значение.

Вы можете увидеть здесь на более высоких знаков после запятой каковы ценности и рабочий пример для кода - https://ideone.com/IgrLAY

1

По умолчанию числа с плавающей точкой сохраняются как тип «двойной». Таким образом, выполняется сравнение по float и double value.

Я думаю,

if(x==1.1f) 

это должно решить проблему.

А также FLT_EPSILON - это наименьшая разница между двумя числами с плавающей запятой, чтобы они были одинаковыми.

if(abs(x-1.1f) <= FLT_EPSILON) 

должен работать

Смежные вопросы