O ile pamiętam siebie programowania, nauczono mnie, aby nie porównywać liczb zmiennoprzecinkowych dla równości. Teraz, czytając Programowanie w Lua o number
typie Lua , znalazłem:
Typ liczby reprezentuje liczby rzeczywiste (zmiennoprzecinkowe podwójnej precyzji). Lua nie ma typu liczby całkowitej, ponieważ nie potrzebuje go. Istnieje powszechne nieporozumienie dotyczące błędów arytmetycznych zmiennoprzecinkowych, a niektórzy obawiają się, że nawet zwykły przyrost może być dziwny w przypadku liczb zmiennoprzecinkowych. Faktem jest, że kiedy używasz podwójnego do reprezentowania liczby całkowitej, nie ma w ogóle błędu zaokrąglania (chyba że liczba jest większa niż 100 000 000 000 000). W szczególności liczba Lua może reprezentować dowolną długą liczbę całkowitą bez problemów z zaokrąglaniem. Co więcej, większość współczesnych procesorów wykonuje arytmetykę zmiennoprzecinkową tak szybko jak (lub nawet szybciej niż).
Czy to prawda dla wszystkich języków? Zasadniczo, jeśli nie przekroczymy liczby zmiennoprzecinkowej w liczbach podwójnych, jesteśmy bezpieczni w arytmetyce liczb całkowitych? Lub, aby być bardziej zgodnym z tytułem pytania, czy jest coś specjalnego, co Lua robi ze swoim number
typem, więc działa dobrze zarówno jako liczba całkowita, jak i liczba zmiennoprzecinkowa?