Насколько я помню, программируя, меня учили не сравнивать числа с плавающей запятой на равенство. Теперь, читая Программирование на Lua о number
типе Lua , я обнаружил следующее:
Тип числа представляет действительные числа (числа с плавающей запятой двойной точности). У Lua нет целочисленного типа, так как он не нужен. Существует широко распространенное заблуждение об арифметических ошибках с плавающей запятой, и некоторые люди опасаются, что даже простое приращение может пойти не так с числами с плавающей запятой. Дело в том, что когда вы используете двойное число для представления целого числа, ошибки округления не возникает вообще (если только число не превышает 100 000 000 000 000). В частности, число Lua может представлять любое длинное целое число без проблем округления. Более того, большинство современных процессоров выполняют арифметику с плавающей точкой так же быстро (или даже быстрее), как целочисленная арифметика.
Это правда для всех языков? В принципе, если мы не выйдем за пределы числа с плавающей запятой в двойных числах, мы в целочисленной арифметике безопасны? Или, чтобы лучше соответствовать названию вопроса, есть ли что-то особенное, что Lua делает со своим number
типом, поэтому он отлично работает как с целочисленным типом, так и с плавающей точкой?