Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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