Problem mit Ungenauigkeit od Rundungsfehler bei float Werten
Verfasst: Donnerstag 6. Januar 2011, 15:45
Hallo,
ich muss einen Simulator erstellen der einen Netzwerklink simuliert, d.h. er führt Protokoll über Ankunft und Ende von TCP Flows. Leider habe ich Probleme mit der Genauigkeit von float Werten, die bspw. das Ende eines TCP Flows berechnen sollen. Das führt dazu das ist statt des richtigen Wertes 0 einen Wert wie -2.6454533008646308e-17 habe (oder auch größer und das führt zu Fehlern).
Das kommt wahrscheinlich daher, dass die Werte unterschiedliche Genauigkeiten haben.
Ein Bsp: Ich berechne den nächsten zeitpunkt an den ein Flow endet: nextdep = simtime + activeflows[0][0] (Liste meiner aktiven TCP Flüsse). Statt 0 kommt etwas wie 2.6454533008646308e-17 raus.
Der Wert nextdep wird ungenau berechnet, da der Wert aus activeflows[0][0] komischerweise auf eine gewisse Anzahl Stellen (immer unterschiedlich) gerundet ist. Das Problem könnte darin liegen, dass m.M. immer auf eine unterschiedliche Zahl von Stellen gerundet wird. Würde immer auf bspw. 10 Stellen gerundet werden, dann gibt es vielleicht diese Probleme nicht.
Ich weiß nicht, wie ich dieses Problem lösen kann und bin ganz verzweifelt.
Danke
ich muss einen Simulator erstellen der einen Netzwerklink simuliert, d.h. er führt Protokoll über Ankunft und Ende von TCP Flows. Leider habe ich Probleme mit der Genauigkeit von float Werten, die bspw. das Ende eines TCP Flows berechnen sollen. Das führt dazu das ist statt des richtigen Wertes 0 einen Wert wie -2.6454533008646308e-17 habe (oder auch größer und das führt zu Fehlern).
Das kommt wahrscheinlich daher, dass die Werte unterschiedliche Genauigkeiten haben.
Ein Bsp: Ich berechne den nächsten zeitpunkt an den ein Flow endet: nextdep = simtime + activeflows[0][0] (Liste meiner aktiven TCP Flüsse). Statt 0 kommt etwas wie 2.6454533008646308e-17 raus.
Der Wert nextdep wird ungenau berechnet, da der Wert aus activeflows[0][0] komischerweise auf eine gewisse Anzahl Stellen (immer unterschiedlich) gerundet ist. Das Problem könnte darin liegen, dass m.M. immer auf eine unterschiedliche Zahl von Stellen gerundet wird. Würde immer auf bspw. 10 Stellen gerundet werden, dann gibt es vielleicht diese Probleme nicht.
Ich weiß nicht, wie ich dieses Problem lösen kann und bin ganz verzweifelt.
Danke