BergEC-jl/helper.jl

13 lines
362 B
Julia

"Sum over array while minimizing catastrophic cancellation as much as possible"
function better_sum(arr::Array{Float64})
pos_arr = arr[arr .> 0]
neg_arr = arr[arr .< 0]
sort!(pos_arr)
sort!(neg_arr, rev=true)
return sum(pos_arr) + sum(neg_arr)
end
better_sum(arr::Array{ComplexF64}) = better_sum(real.(arr)) + 1im * better_sum(imag.(arr))