C-Programm liefert falsches Ergebnis

Mainzl0r

Cadet 3rd Year
Registriert
Nov. 2003
Beiträge
47
Code:
#include <stdio.h>
void main(void)
{
int i;
float j=0;
for(i=1;i<=100;i++)
{
  j=j+0.1;
    }
printf("%f",j);
}

J müsste eigneltich den Wert 10.0 haben.
Es wird aber 10.0000019073..... ausgegeben.
Hat jemand ne Ahnung, wie man diesen Fehler abschalten kann?
 
das wird an der Ungenauigkeit von float liegen, nimm lieber double.

unabhängig davon: void main ist nicht standardgemäß, besser ist int main(), und die rückgabe von 0.
 
Zuletzt bearbeitet:
thx :) mit dem double klappt es..
Unser Prof. hat uns eben schon den kopf der funktion vorgegeben.. mit float.. und wir sollen das weiterprogrammieren..

Und das mit dem void main... das macht er auch immer so.

mfg Mainzl0r
 
musst du da nicht i= 0 machen ?
 
Alternativ könntest du auch die Ausgabe der Zahl auf z.B. 2 Nachkommastellen begrenzen.
Würde dann so aussehen:
printf("%.2f",j);

@riod
Wenn er 100 Durchläufe will, dann ist es in Ordnung, wenn er bei i=1 anfängt und bis i <= 100 geht. Würde er mit i=0 anfangen, müsste er bis i < 100 oder i <= 99 gehen ;)
 
Der Grund des Fehlers ist, dass 0.1 in Binärdarstellung keine endliche Darstellung hat und abgeschnitten wird (versuch die Umwandlung mal händisch :)). Dadurch kommt es nach ausreichend vielen Rechenschritten zu deutlichen Fehlern.

Die Variante mit dem printf( "%.2f ... schaut doch aber für deine Zwecke wirklich gut aus. Alternativ kann man mit double den Fehler ausreichend lange verschleiern *g*
 
Sollte das nicht eigentlich an der falschen Initialisierung liegen ?
Du solltest ein float mit "0.f" oder "0.0f" und nicht mit "0" setzen.

-- -- muckelzwerg
 
Nö, sollte es nicht. Das wird implizit konvertiert. Da ist auch nichts falsch dran.
 
Zurück
Oben