Это будет уже больше чем Паскаль. В обычном Паскале к этому относились проще. Хотя это позорная неоднозначность, заставляет программиста делать эксперименты, чтобы проверить как именно работает конкретный компилятор. Если он будет вычислять в 32битной арифметике, то результат один, а если приведёт всё к 64-битным числам, то другой.
А ты хочешь сделать действительно математический Паскаль. Такой Паскаль должен решать эту проблему на этапе компиляции. Он должен действительно понимать, что такое типы, и каковы их интервалы с математической точки зрения. По идее он должен воспринимать какие угодно большие константы. byte должен быть интервальным типом 0..255, shortint = (-128..127), и так далее.
Такой компилятор, на этапе компиляции поймёт, что в результате вычисления (x-1) получатся числа в интервале -1..$fffffffe, и это число будет заведомо не равно $ffffffff, а значит, такой IF вообще можно не кодировать.
Такой компилятор, также в принципе правильно обработает условие x<834658348562893465823648526348956328465893648563 48. Хотя нет фиксированного типа, в котором можно было-бы сохранить такую константу, но на этапе компиляции видно, что условие будет выполнено всегда.





Ответить с цитированием