Ну в целом вопрос с подвохом) мне в целом конкретный тип не важен, если весь остальной код после умеет работать с этим типом и что самое главное без потери производительности
Что например, если вы захотите использовать эту библиотеку для построения какой-нибудь экономической модели? А для решения этой модели понадобится вычислять производные. И как уже было замечено выше, явная аннотация результата сломает AD.
Идея в том, чтобы математическая функция писалась в максимально шаблонном виде и умела работать с самым широким спектром чисел(f32, f64, big, complex) а не просто выдавала ошибку, когда в результате получается что то отличное от big
function foo(a, b, c, d) local r if some_condition r = a/b else r = c/d end return r end Функция выше нестабильна по типам, а функция ниже стабильна function foo(a, b, c, d) local r::BigFloat if some_condition r = a/b else r = c/d end return r end
Мы в нашей лабе написали достаточно большой пакет для байесовских методов для обработки сигналов, там очень много математики…очень, но ни в одной строчке кода мы нигде явно не указываем аннотации типов как раз для того чтобы поддерживать разные типы и автодифференцирования «из коробки». Производительность при этом не страдает