Ich schreibe einige C-Code zum wiederholten Runden schwimmt auf und ab auf ganzzahlige Werte. Die Standard-C-Math-Bibliothek enthält die Funktionen floor()
und ceil()
. Ich bemerkte, dass eine viel schnellere Implementierung der Funktionen direkt auf ganze Zahlen zu werfen ist:floor() und ceil() -Funktionen vs Casting zu Integer in C
int up, down;
float test = 1.3548;
up = (int)(test + 1); //ceil()
down = (int)test; //floor()
ich eine schnelle Überprüfung tat und das scheint gut zu funktionieren.
- Ist dies eine zuverlässige Methode zum Abrunden und Aufrunden, wenn das Ergebnis eine Ganzzahl ist, als Array-Index (d. H. Liefert es immer die korrekten Ergebnisse)?
- Gibt es einen starken Grund für die deutliche Steigerung der Geschwindigkeit? (Auf meinem System läuft es etwa 3-mal schneller als die math.h Implementierung)
Keine zuverlässige Methode. Stellen Sie sich den Fall vor, dass "test" ein ganzzahliger Wert ist, z. B. "4.0". In diesem Fall ist "floor (x) == ceil (x)", aber Ihr Code würde "up = 5; runter = 4'. – njuffa
Sind Sie sicher, dass es schneller ist? Zeig uns deinen Leistungstest! – Sulthan
Hängt davon ab, was Sie mit "zuverlässig" meinen. Wenn "zuverlässig" bedeutet "es wird funktionieren", dann, ja. Aber wenn du etwas mehr meinst, wie "es wird immer abgerundet/hoch/am nächsten/zu Null/etc ...", dann, nein ... Achte darauf, dass du deine verschiedenen Methoden sowohl mit positiven als auch mit negativen Zahlen ausprobierst als solche, die außerhalb des Bereichs von "int" liegen könnten, um zu sehen, was passiert, so dass Sie die "richtige" Methode für Ihre spezielle Situation wählen können ... Oh, und das sollte wahrscheinlich sein: up = (int) (test + 0.5) '- Denk darüber nach ... – twalberg