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




Reply via email to