Piszę kod C, aby wielokrotnie zaokrąglać w górę iw dół do wartości całkowitych. Standardowa biblioteka matematyczna C zawiera funkcje floor()
i ceil()
. zauważyłem, że znacznie szybsza realizacja funkcji jest oddać bezpośrednio do liczb całkowitych:Funkcje floor() i ceil() vs rzutowanie na liczbę całkowitą w C
int up, down;
float test = 1.3548;
up = (int)(test + 1); //ceil()
down = (int)test; //floor()
Zrobiłem szybki test i to wydaje się działać prawidłowo.
- Jest to niezawodny sposób zaokrąglić górę i w dół, jeśli trzeba którego jest liczbą całkowitą, jako wskaźnika macierzy (to zawsze zwraca prawidłowe wyniki)?
- Czy istnieje silny powód znacznego wzrostu prędkości? (W moim systemie działa około 3 razy szybciej niż realizacja math.h)
Nie jest to niezawodna metoda. Rozważmy przypadek, w którym 'test' jest wartością całkowitą, taką jak' 4.0'. W tym przypadku 'floor (x) == ceil (x)', ale twój kod zwróci 'up = 5; dół = 4'. – njuffa
Czy jesteś pewien, że jest to szybsze? Pokaż nam swój test wydajności! – Sulthan
Zależy od tego, co masz na myśli, mówiąc "niezawodny". Jeśli "niezawodny" oznacza "zadziała", to tak. Ale jeśli masz na myśli coś więcej, np. "Zawsze będzie zaokrąglane w dół/w górę/najbliższe/do zera/etc ...", to nie ... Pamiętaj, aby wypróbować różne metody na liczbach dodatnich i ujemnych, a także jako te, które mogą znajdować się poza zakresem 'int', aby zobaczyć, co się dzieje, więc możesz wybrać" poprawną "metodę dla twojej konkretnej sytuacji ... Och, a to powinno być prawdopodobnie' up = (int) (test + 0.5) '- pomyśl o tym ... – twalberg