Unerwartetes Verhalten von Gleitkommazahlen in C [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Warum sind Gleitkommazahlen ungenau? 4 AntwortenIch habe ein einfaches C-Snippet wie folgt:
#include<stdio.h>
#include<conio.h>
int main()
{
float a=0.3,b=0.5
clrscr();
if(a==0.3)
{
printf("equal");
}
else
{
printf("unequal");
}
if(b==0.5)
{
printf("equal");
}
else
{
printf("unequal");
}
getch();
}
zeigt Ausgabe als:unequal equal
.
Ich verstehe das, weil Computer nimmt0.3
wie1/3
und wie0.333...
ist ungleich zu0.33
, zeigt die Ausgabe ungleich, während in0.5
ist eine genaue Zahl, die als @ ausgegeben wiequal
.
Aber jetzt, wenn ich nehmefloat b=0.2
so was
float b=0.2;
if(b==0.2)
{
printf("equal");
}
else
{
printf("unequal");
}
Dann zeigt es auchunequal
als Ausgabe! Wie0.2
ist1/5
- genauer Wert, es sollte eine Ausgabe @ gebequal
.
ann mir jemand sagen, ob hier etwas nicht stimm