Недавно разбирались со следующей ошибкой. Пользователь добавил условный оператор, в котором при выполнении условия менялась формула расчета. Ну на то он и условный оператор, что оно так работало. Проблема проявлялась в том, что алгоритм начал непредсказуемо работать. На некоторых размерах конструкция не строилась. Причем в онлайн версии получался один результат (не строилась), а в САПР другой (конструкция строилась). Стали разбираться, оказалось, дело было в условии и формулах. При переходе от одной формулы к другой происходил скачок значения результирующей функции. А само условие было привязано к размерному признаку, который в онлайн версии и в САПР считался немного по-разному (с точностью в доли процента). И небольшое изменение размерного признака приводило к скачку в рассчитываемом значении, что в свою очередь приводило к ошибке в конструкции.
При написании алгоритма с условиями должен соблюдаться общий принцип: малые изменения входных параметров должны приводить к малым изменениям выходных параметров. То есть малые изменения размерных признаков должны приводить к малым изменениям конструкции. Или переводя на математический язык, функция зависимости должна быть непрерывной, желательно с небольшим изменением производной – тогда мы будем получать прогнозируемый результат.
Кроме того, если мы хотим делать циклическую подгонку, то нам нужны «хорошие» производные, без резких скачков и поддающиеся достаточно точной оценке.
Интересный момент – про высказанные выше пожелания. Они выглядят совсем не математически, нет четкости, звучат как рекомендации, допускают различные реализации. Это другой уровень математики – математика, которая ближе к искусству. И которая ближе к реальной жизни.