и посмотреть медиа
Code on a Napkin - Python coding
и посмотреть медиа
Channel about programming in Python and other languages. Simple explanations and codes.
Channel about programming in Python and other languages. Simple explanations and codes.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Resource for those interested in programming. Focus on Python, but covers other topics as well. Simple examples and breakdowns.
Знаете ли вы, что переполнение 16-битного числа уничтожило ракету Ariane 5? 4 июня 1996 года Ariane 5 Flight 501 поднялась в воздух и через 37 секунд взорвалась. Причина – навигационный код, который без изменений скопировали с Ariane 4. Там он работал годами, а на Ariane 5 его не хватило и на минуту. Система ориентации конвертировала 64-битное число с плавающей точкой в int16. В Ariane 4 это значение физически не выходило за пределы диапазона – проверки не писали, потому что казалось, что незачем. Ariane 5 летела по другой траектории с большей горизонтальной скоростью – значение вышло за пределы int16: import ctypes value = 32767 print(ctypes.c_int16(value).value) # 32767 — максимум для signed int16 value = 32768 print(ctypes.c_int16(value).value) # -32768 — за пределами диапазона int16 хранит числа от -32768 до 32767. В Python int переполниться не может – это bignum, он просто растет: value = 32767 print(value + 1) # 32768 — Python не знает про int16 print(type(value)) # # Чтобы увидеть ограничения int16, нужно явно попросить: import ctypes print(ctypes.c_int16(32768).value) # -32768 Навигационный код был написан на языке Ada – в нем конверсия float в int16 бросает исключение, когда число выходит за диапазон. Исключение не обработали: навигационная система SRI передала диагностический дамп по шине данных, а бортовой компьютер интерпретировал его как валидные данные полета и начал править курс по мусорным координатам – ракета попыталась скорректировать положение и разрушилась под нагрузкой. Резервная SRI не помогла – там стоял идентичный код. Она отказала почти сразу по той же причине. В официальном отчете комиссии прямо написано: код считался безопасным из-за ограничений полетного профиля Ariane 4. Никто не спросил, будут ли те же ограничения справедливы для новой ракеты. На борту было четыре научных спутника Cluster стоимостью около $370 млн – они должны были изучать магнитосферу Земли. Cluster в итоге запустили повторно в 2000 году, на Союзах. Python не воспроизведет этот баг случайно – int здесь бесконечен по умолчанию. Но ctypes, numpy, struct – любой из них вернет C-поведение, если попросить. Тип данных – это не просто размер памяти, это контракт о том, что произойдет на границе. Код на салфетке x Кусочки кода
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!