SteelEcho & TuringDrop
SteelEcho SteelEcho
Я вот тут перечитывал, как использовали двоичную сетку ЭНИАКа для расчёта траекторий во время войны. Интересно, насколько это было точно по сравнению с современными симуляциями. Как думаешь?
TuringDrop TuringDrop
Эниак, конечно, был впечатляющим достижением, но его точность скорее говорила о грубой силе, чем об изяществе. Чтобы вычислить одну траекторию, он тратил минуты, но из-за накопленных ошибок округления и трехбитной архитектуры, конечные числа отклонялись процентов на несколько. Современные суперкомпьютеры, с плавающей точкой, адаптивным шагом времени и контролем ошибок, решают ту же задачу за секунды и с погрешностью, не превышающей одной миллионной. Так что, несмотря на революционность Эниака для своего времени, ему не сравниться с современными симуляциями.
SteelEcho SteelEcho
Да, грубая сила и короткие слова. Я предпочитаю чистую 64-битную точность, но наследие ЭНИАКа всё ещё пригождается для быстрых проверок.
TuringDrop TuringDrop
Понял тебя. Есть в этих 64-битных машинах какая-то особенная прелесть – ощущение, что управляешь вычислениями, а не перфокартами. А вот ЭНИАК был скорее уникальным калькулятором, с которым приходилось выкручиваться, чтобы получить хоть какое-то число. Их "быстрые проверки" выручали, когда требовалась оценка порядка величины, но если тебе нужен точный путь какого-нибудь процесса, всё равно пришлось бы попотеть. Если говорить о современном подходе, то наследие ЭНИАКа больше в том, что он вдохновил идею о возможности вычислений в физике машиной, а не в той точности, которую он реально обеспечивал.
SteelEcho SteelEcho
Точность измеряется пределами погрешности, а не перфокартами. ЭНИАК показал суть, но мы по-прежнему используем адаптивный шаг, чтобы остатки были меньше одной миллионной.
TuringDrop TuringDrop
Совершенно верно, ты попал прямо в точку: где математика перестаёт быть искусством и начинает превращаться в науку. ENIAC не использовал адаптивный шаг; это был простой интегратор, сжимавший всё в 3-битные целые числа, из-за чего остаток был на несколько цифр неточен по сравнению с тем, что мы видим сейчас. Теперь мы перешли на 64-битные числа с плавающей точкой, отслеживаем локальные ошибки усечения и корректируем размер шага в реальном времени, чтобы накопленная ошибка оставалась меньше, чем миллионная. Это как разница между тем, чтобы гадать, куда упадет снаряд, и тем, чтобы иметь программный инструмент, который точно рассчитает место падения, с сантиметровой точностью.
SteelEcho SteelEcho
Я думаю, нужно составить план из десяти шагов: сначала проверяем интегратора, потом смотрим на предел отсечения, убеждаемся в корректности адаптивного алгоритма, а затем закрепляем цель в зоне радиусом в сантиметр. Ошибки должны быть зафиксированы, а не угадываться.
TuringDrop TuringDrop
Твой план звучит почти как учебник, но помни, что даже проверка интегратора может подвести, если не учесть особенности работы с вещественными числами в компиляторе. Логировать остатки — хорошо, но стоит ещё зафиксировать версию решателя и опции компиляции – вот где кроется причина сантиметрового отклонения. И если ты определяешься с целевым значением, сохрани копию точного входного файла; история любит преподносить сюрпризы.
SteelEcho SteelEcho
Согласен, записывай абсолютно всё, особенно параметры компилятора. Добавлю контрольную сумму к входному файлу и веду историю версий в отдельном логе. Так и делается, чтобы исключить незаметные изменения.
TuringDrop TuringDrop
Кажется, ты превращаешь свою симуляцию в своего рода капсулу времени. Так и делали первопроходцы, когда боялись, что их расчеты просто исчезнут. Не забудь про контрольную сумму, сохрани флаги компилятора, и, может быть, добавь заметку про тактовую частоту машины – именно такие мелочи часто ускользают. Удачи тебе с этим дрейфом, чтоб он не выбился из колеи.
SteelEcho SteelEcho
Я добавлю примечание про тактовую частоту и заархивирую всё с физической резервной копией. Точность – это цепь, каждое звено должно быть зафиксировано.