#include<stdio.h>
int main()
{
float a,b;
a=4.375;
b=4.385;
if(a==4.375)
printf("YES\n");
else
printf("NO\n");
if(b==4.385)
printf("YES\n");
else
printf("NO\n");
return 0;
}
Answer tego kodu:Porównanie zmiennej jednego pływaka do jego wartości zawartej
YES
NO
Zawsze myślałem, jeśli porównać pływak z podwójną wartość. nigdy do niego nie pasuje. chyba że wartość jest czystą liczbą całkowitą. ale tu pływać „a” ma 4,375 dokładny jest w nim jednak „b” nie
printf("%0.20f\n",a);
printf("%0.20f\n",b);
This prints :
4.37500000000000000000
4.38500022888183593750
but if i print
printf("%0.20f\n",4.475);
It prints 4.47499990463256835938
Jak to efekt zaokrąglenia jest wyświetlany w niektórych, a nie w innych.
Czy ktoś może to wyjaśnić. jak "WE" powinien ocenić, kiedy wartość w zmiennej zmiennoprzecinkowej będzie pasować do wartości w niej zawartej, a kiedy nie?
0.375 = 3/8, od 8 = 2^3, nie jest problem z przechowywaniem go w zmiennej binarnej – gkovacs90
możliwy duplikat [dziwne wyjście w porównaniu z float z literałem float] (http://stackoverflow.com/questions/1839422/strange-output-in-comparison-of-float-with-float-literal) – devnull
no not dupliate ..zapytałem różnicę między obiema sytuacjami sir :) –