воскресенье, 28 декабря 2014 г.

Быстрое вычисление квадратного корня в МК

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

Если немного пожертвовать скоростью, то точность можно повысить воспользовавшись способами приближенного вычисления. Из школьной математики вам наверняка известна итерационная формула Герона. Но по мне она по итерациям проигрывает способу обратного умножения, который максимально быстро реализуется операцией сдвига. В коде это будет выглядеть следующим образом:
; value - наше число
i=0;
sum=0;
 while (sum < value)
{
  i++;
  sum = sum + ((i<<1)-1);
 }  
result=i;


Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.