Дима Гричанюк
август 2016.
56150

Как калькулятор находит корень заданного числа?

Ответить
Ответить
Комментировать
0
Подписаться
7
3 ответа
Поделиться
АВТОР ВОПРОСА ОДОБРИЛ ЭТОТ ОТВЕТ

Реалистичнее всего в условиях крайне ограниченного объема вычислительной мощности калькулятора – использование метода Ньютона. Для квадратного корня он, если коротко и просто, заключается в следующем.

Пусть, например, ищется корень числа 13. Берем в качестве ответа любое число. Например, единицу. Считаем полусумму значений этого возможного ответа и исходного числа, делённого на этот «ответ»: 

(1 + 13/1) / 2 = 7

Теперь вероятным ответом будет 7. Повторяем приём ещё несколько раз:

(7 + 13/7) / 2 = 4,4286

(4,4286 + 13/4,4286) / 2 = 3,682

(3,682 + 13/3,682) / 2 = 3,606

И так далее. Уже сейчас ошибка очень маленькая: если проверить и возвести 3,606 в квадрат, получится 13,0057. Калькулятору очень легко делать сложения и чуть сложнее деления, но цепочку таких операций он может провести довольно быстро.

88
-1

Увы, но этот вариант нахождения корня не будет действовать для единицы

-11
Ответить

А смысл находить корень из единицы? Просто один ифик поставить на переменную ввода и все дела

-3
Ответить

Будет работать так же как и для остальных.

+2
Ответить

Опишите, как.

0
Ответить
Ещё 1 комментарий

(1+1/1)/2=1

+7
Ответить

А нельзя разложить функцию в ряд Тейлора и запрограммировать калькулятор?

0
Ответить
Прокомментировать

Привет.
После лекций по мат.анализу я помню такую интересную штуку: компьютер наш владеет лишь операциями сложения (вычитания), умножения и деления. Соответственно, может решать многочлены. Но вот наши замечательные функции вроде корня из X, SinX, CosX, e^X (и т.д.) многочленами не являются (для каждого случая есть доказательство, мол, почему не являются. Ну, например, из за области определения.) И на помощь нам в таком случае приходит Ряд Тейлора - разложение функции на бесконечный ряд степенных функций (а степени-то мы решать можем, это ведь всего лишь умножение!) Не буду вдаваться в подробности и объяснять все детали данной формулы (как минимум потому что на лекции я сидел в полудрёме), помню лишь, что от количества членов ряда (короче, чем больше N мы переберём), тем точнее получится наш результат. Вот сама формула, подогнанная под квадратный корень (по-умному - разложения квадратного корня в ряд Тейлора): wikimedia.org

9
-1

Компьютер умеет только складывать. Все остальное так же делается через сложение )

0
Ответить

Разве что, если это компьютер прошлого века. Современные компьютеры имеют и аппаратурное умножение и деление и ещё много всего. В прочем, это сейчас умеют даже простые микроконтроллеры за 2$

0
Ответить

А как же по вашему работает аппаратное умножение?

-1
Ответить

Ну "аппаратное умножение" всё равно через побитовое сложение выполняется

+2
Ответить
Ещё 3 комментария

К слову разложение корня по Тейлору (√[1 + х]) сходится только при |x| < 1. В остальных же случаях мы не можем использовать эту формулу.

Можно, конечно, выкрутиться, разложить подкоренное выражение на множители, меньшие, чем 2 (√5 ≈ √1.99·√1.99·√1.26 например), вычислить в отдельности каждый по Тейлору (√1.99 = √[1 + 0.99], √1.26 = √[1 + 0.26]) с нужной точностью, а затем перемножить, но это достаточно долгая процедура.

Так что разложение в ряд Тейлора тут не работает так, как хотелось бы

+2
Ответить

Vassillissk, Расписывая как и что работает можно дойти до того что компьютер умеет только открывать и закрывать транзисторы. Но суть в том что умножение - это отдельная команда, реализованная аппаратно, а не алгоритм, реализованный на командах сложения

-3
Ответить

Таки оно и в большинстве калькуляторах так работает: как таковой программы там нет - всё аппаратно. Однако внутренний алгоритм всё равно будет реализовывать вычисление на элементарных командах с помощью триггеров, сдвиговых регистров и т.д. И ни что из этого не может ни делить, ни умножать. Даже если выделить некий блок элеметов в процессоре под реализацию умножения, то они в итоге всё равно будут выполнять элементарные битовые операции, среди которых умножения нет.
 Человеческий мозг тоже не умеет умножать: умножение производится только за счёт того, что таблица умножения была когда-то выучена наизусть. В бинарной системе это, как я понимаю, смысла не имеет.

+1
Ответить
Прокомментировать

Может использоваться алгоритм быстрого обратного квадратного корня, вычисляющий по данному x число 1/sqrt(x) исключительно при помощи магии.

Дмитрий Морозовотвечает на ваши вопросы в своейПрямой линии
4
-4
Прокомментировать
Ответить
Читайте также на Яндекс.Кью
Читайте также на Яндекс.Кью