Нить Ариадны

4 июня 1996 года, всего через 40 секунд после начала полета, на высоте около 3700 м Ariane 5 развалился и взорвался.

Взрыв первого полета Ariane 5, 4 июня 1996 г. https://www.esa.int/

Была назначена независимая комиссия по расследованию, которая предоставила полный отчет.

« Отказ Ariane 501 был вызван полной потерей информации о наведении и ориентации через 37 секунд после запуска последовательности зажигания основного двигателя (30 секунд после старта). Эта потеря информации произошла из-за ошибок спецификации и проектирования в программном обеспечении инерциальной системы отсчета. Обширные обзоры и испытания, проведенные в ходе программы разработки Ariane 5, не включали адекватный анализ и тестирование инерциальной системы отсчета или всей системы управления полетом, которые могли бы выявить потенциальную неисправность ».

И в частности: «Внутренняя программная исключительная ситуация SRI была вызвана во время выполнения преобразования данных из 64-битного значения с плавающей запятой в 16-битное целое число со знаком. Преобразованное число с плавающей запятой имело значение больше, чем могло быть представлено 16-разрядным целым числом со знаком. Это привело к ошибке операнда . Инструкции преобразования данных (в коде Ada) не были защищены от возникновения ошибки операнда, хотя другие преобразования сопоставимых переменных в том же месте кода были защищены. «

Итак, возникла проблема с преобразованием одного числового типа в другой. F # решает эту проблему с помощью проверки типов во время компиляции (и вы можете визуально увидеть это в среде IDE, то есть в Visual Studio), но в то же время упрощает жизнь разработчика, вводя «вывод типа».

Вывод типа относится к автоматическому определению типа выражения в коде на основе контекста и предыдущих выражений.
Наглядным примером может служить функция, которая суммирует две переменные (на самом деле в F # они являются константами на протяжении всего срока выполнения программы):

namespace Mahamudra.Functions
module Inference =
let add a b = a + b + 100
let a = 4
let b = 6
printfn "the sum %i+%i=%i" a b (add a b)
let add' a b = a + b + 100.0
let a' = 4.0
let b' = 6.5
printfn "the sum %A+%A=%A" a' b' (add' a' b')
let add'' a b = List.map2 (+) a b
let a'' = [1;3;4;5]
let b'' = [0;1;3;6]
printfn "the sum %A+%A=%A" a'' b'' (add'' a'' b'')

Результат предыдущих вычислений:

the sum 4+6=110
the sum 4+6.5=110.5
the sum [1; 3; 4; 5]+[0; 1; 3; 6]=[1; 4; 7; 11]

namespace Mahamudra.Functions
module UnitOfMeasure =
[<Measure>] type m
[<Measure>] type h
[<Measure>] type sec
[<Measure>] type kg
let distance = 1.0<m>
let time = 2.0<sec>
let speed distance (time:float<sec>) = distance/time /// meter/sec
let acceleration = 2.0<m/sec^2>
let force = 5.0<kg m/sec^2>
printfn "speed %A/%A=%A m/sec" distance time (speed distance time)

И если мы выберем вместо времени значение time '= 0,3 <h>, код не будет компилироваться:

/// this won't compile
let time' = 0.3<h>
printfn "speed %A/%A=%A" distance time' (speed distance time')
Type mismatch. 
Expecting a     
   'float<sec>'     
but given a     
    'float<h>'     
The unit of measure 'sec' does not match the unit of measure 'h'

Лицензия Pixabay - бесплатно для коммерческого использования

Suggested posts

Кодирование как вид письма

Чему разработчики ПО могут научиться у авторов прозы

Кодирование как вид письма

Есть место, где река Снейк в Вайоминге изгибается на север, расширяется и замедляется. Лоси щиплют кувшинки, пеликаны ловят рыбу, выдры играют.

Навыки, необходимые для того, чтобы стать инженером Python в 2023 году

Навыки, необходимые для того, чтобы стать инженером Python в 2023 году

Подробное руководство по овладению основными навыками Python для успешной карьеры инженера Python в 2023 г. Зачем слушать меня? Привет! Вы можете задаться вопросом: «Почему я должен слушать эту статью о том, как стать инженером Python?» Что ж, позвольте представиться. Я 21-летний инженер Python с 3-летним опытом работы.

Related posts

Революция на рабочем месте: ведущие эксперты обсуждают гибридную и удаленную работу

Революция на рабочем месте: ведущие эксперты обсуждают гибридную и удаленную работу

В сегодняшнем быстро развивающемся бизнес-ландшафте концепция гибридной и удаленной работы приобрела беспрецедентный импульс. Поскольку компании продолжают приспосабливаться к меняющимся потребностям и ожиданиям своих сотрудников, эксперты из разных областей собрались вместе, чтобы обсудить преимущества, проблемы и будущее этого преобразующего способа работы.

Обучение на рабочей неделе важнее, чем вы думаете

Обучение на рабочей неделе важнее, чем вы думаете

Мы часто обнаруживаем, что изо всех сил пытаемся реализовать то, что, как мы знаем, полезно для нас. От того, чтобы сказать значимому другому, что мы любим его, до того, чтобы помнить, что нужно говорить как пират, всегда будут те, кто утверждает, что день, неделя или месяц событий не нужны, потому что они уже делают эти вещи.

Всегда ли искусство аполитично?

Всегда ли искусство аполитично?

Вчера мы закрыли двери конкурса песни «Евровидение» в этом году блестящим, хаотичным грандиозным финалом, в котором шведская певица Лорин забрала домой трофей, став первой женщиной, выигравшей дважды, и вернув корону Швеции спустя 50 лет после того, как ABBA выиграла конкурс. с «Ватерлоо». Они стали одним из крупнейших исполнителей в каноне поп-музыки.

Отслеживайте кого угодно только по номеру телефона | OSINT-расследование

Отслеживайте кого угодно только по номеру телефона | OSINT-расследование

Вы можете быть исследователем OSINT, игроком CTF или просто тем, кто получает спам-звонки. Кто-то, кто пытается проверить номер, который вы видели в рекламе.