Size: a a a

Язык программирования Julia / Julia programming language

2021 July 06

KF

Konstantin Firsov in Язык программирования Julia / Julia programming language
ммм... ясно, спасибо. Еще интересует такая разбежка во времени. Тоже проверил, но только через time. После нескольких запусков время обеих функций перестало  слишком различаться, это срабатывают какие-то оптимизации\кэши в репл?
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
@time такие короткие функции бесполезно мерять
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
там надо чтобы существенная доля секунды была
источник

KF

Konstantin Firsov in Язык программирования Julia / Julia programming language
ясно, спасибо большое.
источник

A

Alexandr in Язык программирования Julia / Julia programming language
>А вот второй вариант эквивалентен третьему или же деление идет там целочисленное, а результат приводится к BigFloat уже в конце
Судя по @code_lowered приведение в конце. Но может я не так @code_lowered понимаю
источник

A

Alexandr in Язык программирования Julia / Julia programming language
julia> function f(a, b)
          r::BigFloat = a/b
          return r
      end
f (generic function with 1 method)

julia> @code_lowered f(10., 20.)
CodeInfo(
1 ─ %1 = a / b
│   %2 = Base.convert(Main.BigFloat, %1)
│        r = Core.typeassert(%2, Main.BigFloat)
└──      return r
)
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
конечно в конце, деление ведь ниоткуда не знает что там bigfloat требуется
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Да, конечно
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
typeassert происходит из-за foo()::BigFloat
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Аннотация возвращаемого типа просто добавляет typeassert в конец функции
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
r::BigFloat делает явный convert
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Вообще это вроде плохой стиль в джулии так писать насколько я понимаю
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Очень редко пригождающийся и обычно означает, что можно как-то более умно архитектурно решить.
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Самый джулиевский и правильный способ в моем понимании просто foo(a,b) = a/b
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Обобщенный и работает правильно со всеми типами
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Я видел только в ситуациях, когда есть формально type unstable функции, но при этом из каких-то соображений тип известен. Тогда можно дать компилятору эту подсказку.
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Сама по себе конструкция r::BigFloat = a/b имеет мало смысла
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Потому что если и a и b имеют тип Float64 они буду делиться как обычно и потом результат просто сконвертируется в BigFloat, но точности это не добавляет
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Мммм... Точность может быть меньше, по сравнению с вариантом, когда их предварительно в BigFloat сконвертили.
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Да, именно
источник