Hi,
I post here my best solution taking advantage that the array is sorted. I
expected that solution to be a lot much faster than other solutions, but
not really.
Indeed I am very impressed by the speed of searchsorted
:
x = [1:0.1:1000000]
val = 8.22
function dicotomy(x, val)
a = start(eachindex(x))
b = length(x)
j = length(x)
dxbest = abs(x[a]-val)
dx = dxbest
while true
dx < dxbest ? dxbest = dx : 1
j = round(Int,(a+b)/2)
dx = x[j]-val
x[j]-val < 0 ? a = j : b = j
abs(a-b) < 2 && break
end
return a,b
end
@time dicotomy(x, 8.22)
0.000004 seconds (5 allocations: 192 bytes)
(73,74)
@time searchsorted(x, 8.22)
0.000005 seconds (7 allocations: 240 bytes)
@time closest_index(x,8.22)
0.027618 seconds (4 allocations: 160 bytes)
73