Oft muss ich CGFloat
zu einer int
Boden oder Decke, für die Berechnung eines Array-Index.Wie kann man einen CGFloat sicher in den Boden stellen?
Das Problem, das ich permanent mit floorf(theCGFloat)
oder ceilf(theCGFloat)
sehe, ist, dass es Probleme mit Gleitkomma-Ungenauigkeiten geben kann.
Also was ist, wenn meine CGFloat
ist 2.0f
aber intern wird es als 1.999999999999f
oder so ähnlich dargestellt. Ich mache floorf
und bekomme 1.0f
, was wiederum ein Float ist. Und dennoch muss ich dieses Biest ins int werfen, was ein anderes Problem hervorbringen kann.
Gibt es eine bewährte Methode, wie Boden oder ceil einen float
zu einem int
, dass so etwas wie 2.0
würde versehentlich niemals würde 1
und so etwas wie 2.0
platt bekommt nie versehentlich 2
erhalten ceiled?
Diese Frage nicht richtig beantwortet werden kann, bis Spezifikationen zur Verfügung gestellt werden, um den Fehler in dem Eingangswert zu beschreiben und was die Folgen sind Werte der Rücksendung, die zu sind hoch oder zu niedrig. Es gibt Kompromisse zwischen der Rückgabe eines zu hohen Werts, weil der vorherige Rundungsfehler den Wert zu hoch gemacht hat, und einem zu niedrigen Wert, da der Wert künstlich angepasst wurde, um den vorhergehenden Fehler zu kompensieren, und umgekehrt. Ohne Erklärung des Zusammenhangs gibt es keine einzige richtige Antwort. –