Как в компьютере найти корень уравнения

Как компьютер вычисляет квадратные корни?

Как компьютер вычисляет квадратные корни?
Я имею в виду, что там происходит! Как это обрабатывает это !!
Использует ли он некоторые математические методы, такие как метод Ньютона?
Как насчет тригонометрических функций? И почти все эти математические функции.
В случае, если у каждого языка свой путь, давайте поговорим о c ++.

Решение

Большинство современных не встроенных процессоров (например, x86 и более крупные ядра ARM) имеют аппаратные инструкции для прямого вычисления квадратных корней. Аппаратная реализация, поддерживающая эти инструкции, различается, но, как правило, представляет собой вариант алгоритма «цифра за цифрой» в учебнике (хотя не всегда в базе два; также могут использоваться базы четыре или шестнадцать). Как правило, это одни из самых медленных базовых арифметических операций на процессоре; такие временные интервалы, как 16-64 цикла, нередки, и эти инструкции часто не передаются по конвейеру.

В процессорах, в которых отсутствуют прямые аппаратные квадратно-корневые инструкции (Itanium, PPC и т. Д.), Типичным подходом является генерация начальной оценки (либо с помощью инструкции, которая производит оценку, либо с помощью таблицы поиска), а затем уточнение этой оценки с использованием итеративного метод (обычно Ньютон или Гольдшмидт). Вы можете отследить некоторые работы Питера Маркштейна или Роджера Голливера на эту тему, если вам интересно.

Более сложные математические функции (например, операции триггера) обычно вычисляются путем сведения аргумента в некоторую фундаментальную область и последующего приближения его полиномиальной или рациональной функцией. Вы можете посмотреть на источники любой из нескольких математических библиотек, которые доступны онлайн для более подробной информации (fdlibm — хорошая отправная точка).

Набор команд x86 предоставляет ряд инструкций, которые поддерживают математические функции, такие как exp, log и sin, но они больше не используются, потому что хорошие реализации программных библиотек дают лучшую производительность.

Другие решения

Еще одна возможность, которая не была упомянута, это CORDIC метод . CORDIC не широко используется / не известен в программном обеспечении, но довольно распространен в аппаратных средствах и довольно хорошо справляется с получением достойной производительности без использования большого количества шлюзов.

Я думаю, что метод итеративной сходимости Ньютона используется при расчете квадратного корня

Как уже отмечали другие, это очень широкий вопрос — что хорошо работает для программного обеспечения, может быть плохим выбором для аппаратной реализации; а затем возникают проблемы правильного округления для IEEE-754, аппаратных таблиц поиска и т. д. Существует много библиотек C с открытым исходным кодом, с libm реализации, а также. Хороший обзор классических и современных методов можно найти Вот .

Решение квадратных уравнений на компьютере

-Муниципальное общеобразовательное учреждение
Кувакинская средняя общеобразовательная школа

Учитель информатики МОУ «Кувакинская СОШ»

с Кувакино, 2011

Как реализуется метод решения квадратных уравнений на компьютере.

Алгоритм решения данной задачи сначала должен быть представлен в виде словесного описания или графически в виде блок-схемы. Алгоритм вычисления корней квадратного уравнения может быть представлен в виде блок схем, изображенных на следующих рисунках:

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

После разработки алгоритма решения задачи и представления его в виде блок-схемы можно перейти к написанию программы – последовательности инструкций на выбранном языке программирования, соответствующей разработанному алгоритму. Например, ниже приведен фрагмент программы решения квадратного уравнения, соответствующий приведенному выше алгоритму, составленному на языке Turbo Pascal.

if D 0 then writeln ( ‘x1=’,(-b+sqrt(D))/(2*a)); writeln (‘x2=’, (-b-sqrt(D));

2. РЕШЕНИЕ КВАДРАТНЫХ УРАВНЕНИЙ СРЕДСТВАМИ EXCEL

2.1 Решение квадратных уравнений в Eхcel.

В ячейку А1 набираем фразу «Решение квадратного уравнения вида Ах2+Вх+С=0», и выделяем ячейки строки А от 1 до той которая находится перед пунктирной линией. Форматируем расположение, начертание и размер букв через опцию ЯЧЕЙКИ меню ФОРМАТ. В подпанели Выравнивание устанавливаем значение «Центрировать по выделению». В подпанели Шрифт — размер и начертание букв (у нашем варианте это полужирный курсив и размер 14). Устанавливаем курсор на ячейке В4 и набираем А=, в ячейке В5 — В=, в ячейке В6 — С=, и производим форматирование по описанному выше методу. Ячейки С4, С5 и С6 выделяем рамкой в подпанели Рамка панели ЯЧЕЙКИ меню ФОРМАТ. Эти ячейки предназначены для ввода в них значений А, В, С.

Набор формулы. В ячейках Е4 и Е6 пишем соответственно х1= и х2=, и форматируем по методу, описанному выше. А в ячейки F4 и F6 записываем формулы так. Сначала ставится равно, потом значение ячейки В5 нажатием на ней мышки, функция Корень вставляется из пункта меню ВСТАВКА — ФУНКЦИЯ. Выбираем из математических функций — КОРЕНЬ. И нажимаем кнопку Далее — для ввода значения, находящегося под корнем. Следуя формуле дискриминанта вводим B5^2-(4*B4*B6), а общий вид формулы — =(-B5 + КОРЕНЬ(B5^2-(4*B4*B6)))/(2*B4) Такую же формулу вставляем и в ячейку F6, но со знаком минус: =(-B5 — КОРЕНЬ(B5^2-(4*B4*B6)))/(2*B4) Теперь после ввода пользователем значений А, В,С в ячейки В4, В5 и В6, в ячейках F4 и F6 будут выводится соответственно значения х1 и х2.

2.2 Нахождение корней квадратного уравнения с помощью
логических функций.

В ячейку А1 набираем фразу «Решение квадратного уравнения вида Ах2+Вх+С=0»,

В ячейку А2 записываем А=, А3 – В=, в А4 – С=. Ячейки В2. В3, В4 выделяем рамкой.

В ячейки D2, D3, D4 записываем соответственно D=, x1=, x2=.

Напишем формулу для подсчета дискриминанта в информатике =В3*В3+4*В2*В4.

Теперь запишем формулы, используя функцию “ЕСЛИ”:

    Для X1: =ЕСЛИ(E2>0;(-B3-КОРЕНЬ(E2))/(2*B2);ЕСЛИ(E2=0;-(B3)/(2*B2); «корней нет»)) Для X2: =ЕСЛИ(E2>0;(-B3+КОРЕНЬ(E2))/(2*B2);ЕСЛИ(E2=0;-(B3)/(2*B2); «корней нет»))

Решение квадратного уравнения x2-2x+1=0

Решение уравнения х2-5х+6=0.

2.3 Нахождение корней квадратного уравнения с помощью
средства «Поиск решения»

Команда Подбор параметра является удобной для решения задач поиска определенного целевого значения, зависящего от одного неизвестного параметра. Для более сложных задач следует использовать команду Поиск решения (Решатель), доступ к которой реализован через пункт меню Сервис/Поиск решения.

Рассмотрим, как воспользоваться Поиском решения на примере того же квадратного уравнения.

После открытия диалога Поиск решения (рис.9) необходимо выполнить следующие действия:

1) в поле Установить целевую ячейку ввести адрес ячейки, содержащей

формулу для вычисления значений оптимизируемой функции, в нашем примере целевая ячейка – это С4, а

формула в ней имеет вид: = C3^2 — 5*C3 + 6;

2) для максимизации значения целевой ячейки, установить переключатель максимальному значению в положение , для минимизации используется переключатель минимальному значению, в нашем случае устанавливаем переключатель в положение значению и вводим значение 0;

3) в поле Изменяя ячейки ввести адреса изменяемых ячеек, т. е. аргументов целевой функции (С3), разделяя их знаком «;» (или щелкая

мышью при нажатой клавише Сtrl на соответствующих ячейках),

для автоматического поиска всех влияющих на решение ячеек используется кнопка Предположить;

4) в поле Ограничения с помощью кнопки Добавить ввести все ограничения, которым должен отвечать результат поиска: для нашего примера ограничений задавать не нужно;

5) для запуска процесса поиска решения нажать кнопку Выполнить.

Как калькуляторы считают корни?

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

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

Теперь вероятным ответом будет 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. Калькулятору очень легко делать сложения и чуть сложнее деления, но цепочку таких операций он может провести довольно быстро.


источники:

http://pandia.ru/text/79/084/71443.php

http://qna.habr.com/q/643875