Rosetta Code

Isqrt (integer square root) of X

Compute integer square roots with a binary search over fixed sample inputs.

Intro View source
Source rosettacode/popular/isqrt_integer_square_root_of_x.vibe
# title: Isqrt (integer square root) of X
# source: https://rosettacode.org/wiki/Isqrt_(integer_square_root)_of_X
# category: Rosetta Code
# difficulty: Intro
# summary: Compute integer square roots with a binary search over fixed sample inputs.
# tags: popular, math, search, integers
# vibe: 0.2

def isqrt(value)
  if value < 2
    return value
  end

  low = 1
  high = (value / 2) + 1
  answer = 1

  while low <= high
    middle = (low + high) / 2
    square = middle * middle

    if square == value
      return middle
    elsif square < value
      answer = middle
      low = middle + 1
    else
      high = middle - 1
    end
  end

  answer
end

def run
  values = [0, 1, 2, 3, 4, 10, 27, 81, 12345]
  rows = []
  index = 0

  while index < values.length
    value = values[index]
    rows = rows.push({
      value: value,
      isqrt: isqrt(value)
    })
    index = index + 1
  end

  rows
end
Output
Press run to execute run from this example.
rosetta-code popular math search integers browser-runner