Einzelnen Beitrag anzeigen
  #5 (permalink)  
Alt 23.02.18
Ca$hDigger Ca$hDigger ist offline
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Das Problem der Fließkommaarithmetik ist das Vergleiche nicht funktionieren ohne Bedingungen mit einzubauen.

1 != 1.00000000000001
1 != 0.99999999999999
Obwohl die rechte Seite nahezu 1 entspricht wird dies vom Computer anderes gesehen.

Auf die Schnelle als möglichen Lösungsweg würde ich prüfen ob die Gleitkommazahl ein bestimmten Abstand zur nächstgelegenen ganzen Zahl unterschreitet.

1. ermittle die nächstliegende ganze Zahl.
2. definiere Toleranzabstand zB 0.0000001
3. prüfe ob die Differenz zwischen Gleitkommazahl und nächstliegender ganzer Zahl den Toleranzabstand unterschreitet. Ist diese Bedingung erfüllt kann man sagen, der Wert liegt so nah an der ganzen Zahl, dass er als ganze Zahl gelten kann.

Gibt sicherlich auch andere Wege, dies war das erste was mir dazu eingefallen ist.
Beim Prüfen auf Gleichheit von zwei double-Werten arbeitet man oft mit solchen Toleranzwerten. Dies hier ist nichts anderes, nur dass man mit der nächstliegenden Ganzzahl vergleicht.

C$D