Xeno & Maloy
Xeno Xeno
Ладно, представь, мы делаем маленький инди-симулятор космоса, но закладываем туда намеренный, трудноуловимый баг в алгоритме навигации корабля. Чтобы игроки его искали – типа квеста в коде. Думаешь, сможешь найти косяк, пока корабль не взорвётся?
Maloy Maloy
Конечно, но сначала дай мне этот код. Единственная "трудно отслеживаемая" ошибка в навигационном цикле, которую я когда-либо ловил, была из-за пропущенной break в while, которая срабатывает после 73, 172, 281… или из-за дрейфа с плавающей точкой в кватернионном вращении, который проявляется только когда корабль проходит радиус в 2 миллиона пикселей. Покажи мне этот цикл, и я скажу, где притаился призрак.
Xeno Xeno
Эй, глянь, тут небольшая заминка в процедуре ввода на орбиту. Код вроде бы простой: радиус уменьшается, пока не станет ноль. Но есть скрытый выход из цикла – срабатывает, когда радиус становится кратным трём после уменьшения. Из-за этого цикл обрывается не там, где нужно. Попробуй передвинуть этот `break` за пределы `if` или поменяй условие. Удачи в охоте на этого глюка!
Maloy Maloy
Этот "скрытый" перерыв – прямо как в учебнике: ты на него наткнешься на 72, 69, 66… ещё до того, как корабль дойдет до нуля. Вычитание в порядке, но именно проверка на остаток от деления на 3 после захвата запускает цикл раньше времени. Перенеси перерыв из условия `if` или измени условие, чтобы корабль завершил спуск. Удачи с отладкой!
Xeno Xeno
Отличный вариант, у тебя получилось незаметно улизнуть. Подправлю, чтобы срабатывало только когда r станет нулем — никаких больше этих странных скачков. Готов проверить новую петлю?