Hallo, ich habe in C eine Schleife, die eine Reihe von Berechnungen mit floats ausführt und dabei test[][] immer weiter anpassen soll. Dabei kommt keine Division vor! Nach der Schleife lasse ich mir test[0][0] ausdrucken und bekomme dabei höchst seltsame Ergebnisse: Schleifendurchlauf 33: -0.5... Schleifendurchlauf 34: -0.7... Schleifendurchlauf 35: -1.1... Schleifendurchlauf 36: -5.3... Schleifendurchlauf 37: -1.#IND00 Schleifendurchlauf 38: -1.#IND00 [...] Oft kommt dies ja durch eine Division durch 0, jedoch dividiere ich nicht und außerdem wird der Code ja bis Schleifendurchlauf 36 durchlaufen. Ich bin echt ratlos und wäre dankbar für ein paar Tipps, an was das liegen könnte! Viele Grüße, Tom
Tom schrieb: > Hallo, > > ich habe in C eine Schleife, die eine Reihe von Berechnungen mit floats > ausführt Solange du nicht weißt, was du dabei tust, sollst du auf einem PC keine float verwenden. Verwenden statt dessen double, die sind ein wenig einfacher zu handhaben, wenn sie auch das grundsätzliche Problem nicht lösen sondern nur verkleinern. Aber auf einem PC gibt es nur einen einzigen Grund float zu verwenden: wenn du Milliarden davon manipulieren musst. In allen anderen Fällen immer double benutzen. Mit float hast du ungefähr 6 bis 7 signifikante Stellen. Achtung: signifikante Stellen sind nicht Nachkommastellen! Bei der Zahl 4321.7658 hast du 4 Vorkommastellen und noch in etwa 2 bis 3 sauebere Nachkommastellen. Mit jeder Berechnung die du machst, verringert sich aber deren Signifikanz. Durch Rundungsfehler schrumpfen die signifikanten Stellen ganz schnell auf 5 bis 6 und kurz darauf auf 4 bis 5 zusammen. Deine Ergebnisse sind immer ungenauer, je mehr du damit rechnest. Dassselbe Problem hast du im Prinzip auch mit double. Nur startest du erst mal mit rund 15 signifikanten Stellen. D.h. du hast mehr Berechnungssspielraum ehe der Fehler so groß wird, dass er dir deine Ergebnisse komplett versaut. Wenn du dann immer noch nicht weiter kommst, dann wird dir wohl nichts anderes übrig bleiben, als dein hochgeheimes Programm mal herzuzeigen. Rechnen mit Floating Point ist wie das Umschaufeln von Sandhaufen. Je öfter man es tut, desto weniger Sand und desto mehr Schmutz hat man.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.