LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

В j он ничего и не записывает, он эту переменную вообще выкинул «за ненадобностью», и сделал виртуальную новую, в которой записано бывшее j, сразу умноженное на 0x20000001, и следит только а ней. Поскольку j было нужно в условии j<9, он это условие переделал в (j*0x20000001)<(9*0x20000001). Это переделанное условие не равноценно исходному, но багоделам, которые писали компилятор, плевать.

Исправление firkax, :

В j он ничего и не записывает, он эту переменную вообще выкинул «за ненадобностью», и сделал виртуальную новую, в которой записано бывшее j, сразу умноженное на 0x20000001, и следит только а ней. Поскольку j было нужно в условии j<9, он это условие переделал в (j*0x20000001)<(9*0x20000001). Это переделанное условие не равноценно исходному и устраивает переполнение при умножении двух констант, но багоделам, которые писали компилятор, плевать.

Исходная версия firkax, :

В j он ничего и не записывает, он эту переменную вообще выкинул «за ненадобностью», и сделал виртуальную новую, в которой записано бывшее j, сразу умноженное на 0x20000001, и следит только а ней. Поскольку j было нужно в условии j<9, он это условие переделал в (j*0x20000001)<(9*0x20000001).