Ссылка на код демонстрации
По причинам производительности компилятор Haxe не осуществляет переполнения. Задача проверки на переполнения лежит на конечной платформе. Вот несколько примеров поведения при переполнении на разных платформах:
- С++, Java, C#, Neko, Flash: 32-битное целое число со знаком с обычным поведением при переполнении
- PHP, JS, Flash 8: нет типа int, потеря точности случится в случае достижения лимита float($2^{52}$)
В качестве альтернативы можно использовать классы Int32 и Int64 для уверенности, что будет правильное поведение при переполнении независимо от платформы, но ценой дополнительных вычислений в зависимости от платформы.
Пример поведения при переполнении продемонстрирован в коде ниже. Переменная i, выходя за пределы Int, приобретает отрицательное значение, а затем при декременте на единицу — крайнее положительное значение
1 2 3 4 5 6 7 8 9 10 11 12 |
class Main { static function main() { var i:Int = 2147483647; trace(i); i++; trace(i); i--; trace(i); } } |
Заметка: данный код следует выполнять в среде HaxeDevelop, так как на Try Haxe! он (код) приобретает другое поведение