Можно ли выполнить операцию деления с помощью аппаратного квадратного корня?

0

Мне интересно, есть ли какие-либо алгоритмы для выполнения деления с плавающей запятой, которые будут ускорены, если у вас есть доступ к блоку квадратного корня с плавающей точкой в аппаратном обеспечении?

Если да, то каковы эти алгоритмы?

  • 4
    Если у вас есть аппаратный log который может помочь, но трудно понять, как аппаратный sqrt поможет с делением.
  • 1
    Это, вероятно, лучше всего думать математически - то есть, вы можете придумать способ выразить A/B через квадратный корень из A и / или B ?
Показать ещё 6 комментариев
Теги:
floating-point
algorithm
math

1 ответ

1
Лучший ответ

Разделение на квадратный корень - фактически то, как операция деления обычно выполняется в аппаратном обеспечении. Чтобы быть более точным, блок квадратного корня почти повсеместно вычисляет взаимный квадратный корень (1/sqrt(X)), поскольку с ним можно легко выполнять операции деления и квадратного корня: sqrt(x) = x*(1/sqrt(x)) и R=X/Y=X*Z*Z где Z=1/sqrt(Y).

Если есть аппаратная инструкция, которая возвращает оценку, вы можете улучшить результат с помощью следующего итерационного метода:

Z = Z * (3-Y*Z*Z )/2

  • 2
    Я не могу найти никаких доказательств этого. Википедия довольно ясно говорит о старых Intel и AMD (определенно не так), Itanium определенно не работает так, и в целом это не дает вам необходимой точности: IEEE754 требует правильного деления (<1 ulp). Обратите внимание, что «аппаратная эффективность» не имеет значения. Ворота дешевы, проблема неэффективной реализации - потеря энергии. И это в равной степени относится к монстрамным процессорам мощностью 120 Вт и встроенным SoC мощностью 120 мВт.
  • 0
    Подразделение Ньютона Рафсона не пытается найти квадратный корень из взаимного. en.wikipedia.org/wiki/… Кроме того, вы можете показать свою работу? Я разработал итерацию Ньютона-Рафсона для квадратного корня из обратной величины, и она не согласуется с вашей формулой ...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню