О сайте Группа в контакте RSS Годограф Volksturm Импульсные металлоискатели IB металлоискатели Пинпоинтеры Другие схемы Заказать Конструкции металлоискателей Полезные ссылки

Схемы металлоискателей MD4U

Сборка, настройка, обсуждение, теория и практика построения металлоискателей.
Текущее время: Чт: 28 мар 2024 12:10

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему
 [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Кто как вычисляет квадратный корень?
СообщениеДобавлено: Ср: 31 мар 2010 0:03 
Вот понадобилось мне квадратный корень вычислять, а стандартные Сишные библиотеки я не использую и деления в используемом процессоре тоже нет (метод Ньютона, вроде бы, отпадает). Присмотрел метод "вычисления столбиком"(http://guidoscope.com/ru/%D0%98%D0%B7%D ... 0%BE%D0%BC.), вроде легко переносится на двоичную арифметику. Никто не реализовывал? Или есть что попроще без деления?


Вернуться к началу
  
 


Вы можете отключить эти сообщения.
 Заголовок сообщения: Re: Кто как вычисляет квадратный корень?
СообщениеДобавлено: Ср: 31 мар 2010 7:54 
Не в сети
Аватара пользователя

Зарегистрирован: Ср: 25 мар 2009 16:13
Сообщения: 1097
Откуда: Ukraine, Полтава
Если числа 8-битные, то проще и на 2 порядка быстрее - таблица. ИМХО по другому никак.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кто как вычисляет квадратный корень?
СообщениеДобавлено: Ср: 31 мар 2010 9:33 
Пффф, числа 32-битные (я надеюсь, до 64-битных дело не дойдёт), так что таблица вроде не прокатит :)


Вернуться к началу
  
 
 Заголовок сообщения: Re: Кто как вычисляет квадратный корень?
СообщениеДобавлено: Ср: 31 мар 2010 10:26 
Вот что получилось для беззнаковых 32-битных чисел, вроде работает.
Код:
unsigned __int32 columnSqrt( unsigned __int32 arg )
{
   unsigned __int32 result = 0;
   unsigned __int32 currentStep = 0;
   unsigned __int32 currentLeft = 0;
   unsigned __int32 currentSub;
   int i;

   //
   for ( i = 30; i >= 0; i -= 2 )
   {
      //
      currentSub = currentStep - currentLeft;
      //
      currentStep = (currentSub << 2) + ((arg >> i) & 3);
      //
      currentLeft = (result << 2) + 1;
      //
      if ( currentLeft <= currentStep )
      {
         result += result + 1;
      }
      else
      {
         currentLeft = 0;
         result <<= 1;
      }
   }
   //
   return result;
}


Вернуться к началу
  
 
 Заголовок сообщения: Re: Кто как вычисляет квадратный корень?
СообщениеДобавлено: Ср: 31 мар 2010 12:22 
Не в сети

Зарегистрирован: Ср: 17 мар 2010 10:32
Сообщения: 4
иногда помогает поиск в гугле :
http://www.jimfranklin.info/microchipda ... 91040a.pdf
http://www.worldserver.com/turk/compute ... edSqrt.pdf


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кто как вычисляет квадратный корень?
СообщениеДобавлено: Ср: 31 мар 2010 12:54 
Первая ссылка - по определению отстой, ибо просит умножение, да и команд дохрена (к тому же на PIC'овском ассемблере, беэээ). Вторая - то же самое, что накалякал я, только в профиль. Пилите, Шура, то есть, ищите дальше ;)


Вернуться к началу
  
 
 Заголовок сообщения: Re: Кто как вычисляет квадратный корень?
СообщениеДобавлено: Ср: 31 мар 2010 15:29 
Не в сети
Аватара пользователя

Зарегистрирован: Вс: 26 авг 2007 12:54
Сообщения: 1063
Если квадратный корень надо для вычисления длинны вектора, то можно обойчись без корня из суммы квадратов гипотенуз, есть одно оригинальное геометрическое приближение двумя повёрнутыми на 45 градусов квадратами
Изображение

линк на страничку: http://www.azillionmonkeys.com/qed/sqroot.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кто как вычисляет квадратный корень?
СообщениеДобавлено: Ср: 31 мар 2010 20:31 
О, прикольная ссылка, спасибо :) Нет, мне не длину вектора нужно вычислять. В принципе, вышеупомянутый код в причёсанном виде и так компилируется в 17 ассемблерных команд, можно ещё ручками попробовать переложить на ассемблер, но по-моему и так неплохо :)


Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти: