?

Log in

No account? Create an account
a_fixxer
SICP на Ruby: упражнение 1.7 и 1.8 
6-фев-2008 07:57 pm
Как и ожидалось, в упражнении нас просят улучшить программу извлечения квадратного корня, улучшив проверку на
выход из итерации. Исходная версия работает некорректно на малых и больших числах. Все тривиально.

def average(x, y)
  (x + y) / 2
end

def improve(guess, x)
  average(guess, (x / guess))
end

def sqrt_iter(guess, x, prev, eps)
  if (prev - guess).abs < eps
    guess
  else
    sqrt_iter(improve(guess, x), x, guess, eps)
  end
end

def sqrt(x, eps)
  sqrt_iter(1.0, x, x + 2 * eps, eps)
end


В 1.8 нам нужно посчитать кубичные корни. Понятно, что изменению подвергнется
только функция improve

def improve(guess, x)
  (x / guess ** 2 + 2 * guess) / 3
end
This page was loaded апр 22 2019, 12:00 am GMT.