Для скаляров оператор \ (решение линейной системы) эквивалентен оператору деления /. Похоже по производительности?
Я спрашиваю, потому что сейчас в моем коде есть строка вроде
x = (1 / alpha) * averylongfunctionname(input1, input2, input3)
Визуально важно, чтобы деление на alpha происходило слева, поэтому я рассматриваю возможность замены этого на
x = alpha \ averylongfunctionname(input1, input2, input3)
Как лучше всего поступить в этой ситуации с точки зрения стиля и производительности?
Вот некоторые озадачивающие результаты тестов:
julia> using BenchmarkTools
[ Info: Precompiling BenchmarkTools [6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf]
julia> @btime x[1]\sum(x) setup=(x=rand(100))
15.014 ns (0 allocations: 0 bytes)
56.23358979466163
julia> @btime (1/x[1]) * sum(x) setup=(x=rand(100))
13.312 ns (0 allocations: 0 bytes)
257.4552413802698
julia> @btime sum(x)/x[1] setup=(x=rand(100))
14.929 ns (0 allocations: 0 bytes)
46.25209548841374
Все они примерно одинаковы, но я удивлен, что подход (1 / x) * foo имеет лучшую производительность.
