2014-06-12 13 views
5

Obecne wersje Lua nie obsługują liczb całkowitych, tylko zmiennoprzecinkowe. (W nadchodzącym 5.3 to się zmienia, ale zignorujmy to.)Dlaczego powinniśmy używać lua_pushinteger()?

Moje pytanie brzmi: jaki jest pożytek z lua_pushinteger()? Jeśli liczby są wrzucane do liczby zmiennoprzecinkowej, dlaczego nie użyć bezpośrednio numeru lua_pushnumber()?

(Proszę nie odpowiadać "dla przyszłej kompatybilności z 5.3", co jest dobrą odpowiedzią dla dzisiaj, ale jest odpowiedzią, która w przeciwnym razie nie spełnia mojego curisoty: wsparcie liczby całkowitej nie było oczekiwane w dawnych czasach Chcę poznać powód, dla którego wprowadzono po raz pierwszy lua_pushinteger(), a nie z przeprosinami.)

+0

Aby wyłączyć ostrzeżenia o możliwej utracie informacji? –

+0

Odpowiedź, którą zaproponowałeś, jest poprawna, zignorowałem * liczbę całkowitą i * liczbę niepodpisaną 5.3 w moim kodzie, ale teraz widzę, że wprowadzono * liczbę całkowitą i * niepodpisany kod, aby zmniejszyć nas do 5.3. – user1095108

Odpowiedz

5

W celu zapewnienia dokumentacji, wydajności i poprawności wprowadzono jawne postępowanie z liczbami całkowitymi w interfejsie API.

Koncentracja obsługi liczb całkowitych jawnie w interfejsie API pozwala rdzeniu używać najlepszej konwersji do i z floats; na niektórych platformach może to być kosztowne, jeśli zostanie zrobione naiwnie. Pozwala to także rdzeniowi sprawdzić, czy nie ma przepełnienia, chociaż Lua 5.1 i 5.2 tego nie sprawdzają.

+0

Dzięki. Mam małe pytanie: rozumiem, co znaczy "dokumentacja" i "wydajność", ale co masz na myśli mówiąc "poprawność"? Ponieważ Lua nie sprawdza przepełnienia, jak inaczej rzutowanie z int na float może być niepoprawne? –

+0

@NiccoloM., To * może * sprawdzić przepełnienie ... – lhf

Powiązane problemy