Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Своими руками

Своими руками Завершенные и текущие проекты, хард & софт

Ответ
 
Опции темы Опции просмотра
Старый 11.03.2013, 10:22   #1
torrego7
Senior Member
 
Регистрация: 18.05.2012
Сообщений: 346
Вес репутации: 474/28
torrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of light
По умолчанию Квадратные корни и не только

Предлагаю всем желающим билиотеки на асм вычислений квадратных корней целочисленных.
А также в придачу интересную страницу.
torrego7 вне форума   Ответить с цитированием
Старый 11.03.2013, 10:26   #2
torrego7
Senior Member
 
Регистрация: 18.05.2012
Сообщений: 346
Вес репутации: 474/28
torrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of light
По умолчанию Re: Квадратные корни и не только

Я поторопился и забыл вложить архив.
Вложения
Тип файла: rar SQRT.rar (3.5 Кб, 74 просмотров)
torrego7 вне форума   Ответить с цитированием
Старый 15.03.2013, 12:17   #3
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,316
Вес репутации: 4442/103
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: Квадратные корни и не только

Цитата:
Сообщение от torrego7 Посмотреть сообщение
Я поторопился и забыл вложить архив.
там ссылка на Корабельникова - первая (после микрочип.ком)!
Секта опять наступает?
ampersant вне форума   Ответить с цитированием
Старый 15.03.2013, 18:17   #4
torrego7
Senior Member
 
Регистрация: 18.05.2012
Сообщений: 346
Вес репутации: 474/28
torrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of light
По умолчанию Re: Квадратные корни и не только

Я чужую славу не присваиваю. Я только адаптировал под PIC12, PIC16, себя не упомянув.
torrego7 вне форума   Ответить с цитированием
Старый 29.03.2013, 15:12   #5
rn6hi
Junior Member
 
Регистрация: 22.03.2013
Возраст: 41
Сообщений: 8
Вес репутации: 100/0
rn6hi will become famous soon enoughrn6hi will become famous soon enough
По умолчанию Re: Квадратные корни и не только

Спасибо, хорошая информация и исходники на асм! Хотел поинтересоваться, есть ли исходники на другие вычисления, например синусы\косинусы?
rn6hi вне форума   Ответить с цитированием
Старый 29.03.2013, 15:32   #6
torrego7
Senior Member
 
Регистрация: 18.05.2012
Сообщений: 346
Вес репутации: 474/28
torrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of light
По умолчанию Re: Квадратные корни и не только

Библиотеки математики от Microchip на asm
torrego7 вне форума   Ответить с цитированием
Старый 29.03.2013, 21:20   #7
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,659
Вес репутации: 5212/158
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Квадратные корни и не только

Цитата:
Сообщение от torrego7 Посмотреть сообщение
в 49 жизнь только начинается...
Greg вне форума   Ответить с цитированием
Старый 30.03.2013, 09:37   #8
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,659
Вес репутации: 5212/158
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Квадратные корни и не только

Цитата:
Сообщение от Greg Посмотреть сообщение
в 49 жизнь только начинается...
без всякой издевки, в 49 первый раз в жизни сумма цифр возраста равняется 13. эх, молодость...

а сайту тому 18 лет, и это уже "новый" (старый доступен в архивах).
для пикомана вообще-то must.
и я бы убрал это из "своими руками".
Greg вне форума   Ответить с цитированием
Старый 30.03.2013, 09:58   #9
torrego7
Senior Member
 
Регистрация: 18.05.2012
Сообщений: 346
Вес репутации: 474/28
torrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of lighttorrego7 is a glorious beacon of light
По умолчанию Re: Квадратные корни и не только

Своими руками была пределка программы. Переместите мой раздел на своё усмотрение.
torrego7 вне форума   Ответить с цитированием
Старый 03.04.2013, 15:39   #10
Phaeton
Senior Member
 
Аватар для Phaeton
 
Регистрация: 20.12.2012
Сообщений: 320
Вес репутации: -34/0
Phaeton can only hope to improve
По умолчанию Re: Квадратные корни и не только

Блин да неужели нету проги которая просто тупо глупо перегоняет написанную формулу в асму? Не поверю=)
Phaeton вне форума   Ответить с цитированием
Старый 03.04.2013, 15:59   #11
SergP01
Senior Member
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 49
Сообщений: 607
Вес репутации: 39/0
SergP01 is on a distinguished road
По умолчанию Re: Квадратные корни и не только

Цитата:
Сообщение от Phaeton Посмотреть сообщение
Блин да неужели нету проги которая просто тупо глупо перегоняет написанную формулу в асму? Не поверю=)
есть.....
пишите на С ...sin(a);
а потом смотрите дамп и копируете от туда
SergP01 вне форума   Ответить с цитированием
Старый 29.06.2013, 17:17   #12
Guaho
Senior Member
 
Аватар для Guaho
 
Регистрация: 28.06.2013
Возраст: 45
Сообщений: 660
Вес репутации: 1432/37
Guaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud ofGuaho has much to be proud of
По умолчанию Re: Квадратные корни и не только

Квадратный корень из числа равен количеству последовательных нечётных чисел, которые можно из него вычесть. Идею прочитал не помню где, много лет назад.
Guaho вне форума   Ответить с цитированием
Старый 29.06.2013, 20:23   #13
xepp
Senior Member
 
Аватар для xepp
 
Регистрация: 24.04.2007
Адрес: Kazan
Возраст: 39
Сообщений: 564
Вес репутации: 924/53
xepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to behold
Отправить сообщение для xepp с помощью ICQ
По умолчанию Re: Квадратные корни и не только

Цитата:
Сообщение от Guaho Посмотреть сообщение
Квадратный корень из числа равен количеству последовательных нечётных чисел, которые можно из него вычесть. Идею прочитал не помню где, много лет назад.
Всё просто. Арифметическая прогрессия, 1+3+5+...+(2n-1)=n*n, число слагаемых n. Если целого корня не существует, получим как бы отбрасывание дробной части. Для мелких процов, где только сдвиги да сложения, алгоритм и правда вкусный.
xepp вне форума   Ответить с цитированием
Старый 30.06.2013, 12:12   #14
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,659
Вес репутации: 5212/158
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Квадратные корни и не только

Цитата:
Сообщение от xepp Посмотреть сообщение
Всё просто. Арифметическая прогрессия, 1+3+5+...+(2n-1)=n*n, число слагаемых n. Если целого корня не существует, получим как бы отбрасывание дробной части. Для мелких процов, где только сдвиги да сложения, алгоритм и правда вкусный.
единственный плюс предложенного алгоритма - меньший расход озу и пзу при размене на время выполнения. Да и то надо постараться уложиться (в озу и пзу)
для восьми битов алгоритм расписан здесь (2000 год) http://www.piclist.com/techref/micro.../sqrt8ngsd.htm
Greg вне форума   Ответить с цитированием
Старый 13.02.2017, 08:21   #15
hgm0hgm0
Junior Member
 
Регистрация: 12.02.2017
Возраст: 55
Сообщений: 1
Вес репутации: 100/0
hgm0hgm0 will become famous soon enoughhgm0hgm0 will become famous soon enough
По умолчанию Re: Квадратные корни и не только

Код:
;*********************************************************************************************
SQRT24
;*********************************************************************************************
; Вычисляем корень из 24 разрядного числа,                    
; уложенного в регистры - Byte_1, Byte_2, Byte_3,                                
; где результатом являются регистры Result_L, Result_H;                          
; маской регистры Temp_0, Temp_1;    
; Алгоритм нахождения корня называется "столбиком".
;*********************************************************************************************
     clrf         Result_H        ; Подготовимся к вычислениям, предварительно
    clrf         Result_L        ; очистив используемые регистры.
    clrf         Temp_0        ;
    clrf         Temp_1        ;

    movlw         .12            ; Количество парных бит 
    movwf         Q_Count        ; 3 слова по 8 бит = 24 бита, 24/2 = 12 пар. 

Shift
    rlcf         Byte_1, f        ; Приписываем к текущему остатку  
    rlcf         Byte_2, f        ; очередную пару бит.  
    rlcf         Byte_3, f         ; Остаток = 4 * Остаток +2 бита из подкоренного 
    rlcf         Temp_0, f         ; (Temp_0,1)= 4 * (Temp_0,1) + 2 бита из (Byte_n)
    rlcf         Temp_1, f         ;  
    rlcf         Byte_1, f        ; Умножение проводим         
    rlcf         Byte_2, f        ; двойным сдвигом
    rlcf         Byte_3, f         ; "влево с учетом переноса"
    rlcf         Temp_0, f         ; 
    rlcf         Temp_1, f        ; 

    rlcf         Result_L, f        ; Находим очередную двоичную 
    rlcf         Result_H, f        ; цифру результата:
    rlcf         Result_L, f        ; 
    rlcf         Result_H, f        ; 4*Result_+1
    bcf         Result_L, 1        ;  
    bsf         Result_L, 0        ; это здесь мы прибавили единичку. 

SubTest
    movff         Result_L, WREG    ;  
    subwf         Temp_0,f        ; Temp_0,1 < Result_  ??    
    movff         Result_H, WREG    ;  
    subwfb         Temp_1,f        ; 

    bc        Set1            ; Если Результат оказался меньше
; Остатка, то ставим "1" в текущем бите ответа. 

    movff         Result_L, WREG    ; Корректируем "текущий остаток":
    addwf         Temp_0,f        ; надо все вернуть,
    movff         Result_H, WREG    ; ведь мы отняли от остатка
    addwfc         Temp_1,f        ; слишком много, в  ответе
    bra         Set0            ; текущий бит надо установить в  "0".
Set1
    bsf         Result_L, 1        ; Текущий бит ответа установим в "1". 
Set0
    rrcf         Result_H, f        ; Корректируем "текущий результат":  
    rrcf         Result_L, f        ; Result_0,1 = 2 * Result_0,1
    bcf         Result_H, 7        ;       

    decfsz         Q_Count,f        ; Подсчитали обработанную пару, 
    bra         Shift            ; еще не все пары обработали, продолжим.
;*********************************************************************************************
;                Округление результата.
; Алгоритм основан на сравнивании остатка (находящего в регистрах Temp_0:Temp_1),
; с результатом, (регистры Result_L:Result_H).
; Если остаток больше результата, то округление идет в большую сторону - прибавим единичку.
; Если остаток меньше результата, то округление идет в меньшую сторону - результат не меняется.
; Если остаток равен нулю, то мы получили точный целочисленный результат.
;*********************************************************************************************
    movff         Result_L, WREG    ; Что больше, остаток или ответ?
    subwf         Temp_0,f        ; Проверим операцией отнимания,
    movff         Result_H, WREG    ; учитывая перенос.
    subwfb         Temp_1,f        ; 
    bnc        End_SQRT24        ; Если Результат больше остатка, округляем в меньшую
; сторону.
    incf         Result_L, f        ; Надо округлять в большую сторону: 
    clrf         WREG            ; добавим единичку
    addwfc         Result_H, f        ; к ответу.
End_SQRT24
    return                    ; УРА!!! Корень нашелся.
;*********************************************************************************************

    end                    ; Отмучились.

Нажмите на изображение для увеличения
Название: Алгоритм.JPG
Просмотров: 12
Размер:	74.3 Кб
ID:	10586

что-то не сумел поставить как листинг.
надо поближе познакомиться с правилами...
Миниатюры
squ1.jpg   squ2.jpg   squ3.jpg   squ4.jpg  

Последний раз редактировалось IceS; 15.02.2017 в 16:18. Причина: пользуйтесь тегами [CODE][/CODE]
hgm0hgm0 вне форума   Ответить с цитированием
Старый 13.02.2017, 08:31   #16
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,316
Вес репутации: 4442/103
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: Квадратные корни и не только

Цитата:
Сообщение от hgm0hgm0
Отмучились.
Да под каждую архитектуру вагон способов. Вот если есть умножитель на борту



А для тригонометрии кроме Тейлора/Маклорена, таблиц есть ещё CORDIC
ampersant вне форума   Ответить с цитированием
Старый 15.02.2017, 12:38   #17
xepp
Senior Member
 
Аватар для xepp
 
Регистрация: 24.04.2007
Адрес: Kazan
Возраст: 39
Сообщений: 564
Вес репутации: 924/53
xepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to beholdxepp is a splendid one to behold
Отправить сообщение для xepp с помощью ICQ
По умолчанию Re: Квадратные корни и не только

Цитата:
Сообщение от ampersant Посмотреть сообщение
Да под каждую архитектуру вагон способов. Вот если есть умножитель на борту



А для тригонометрии кроме Тейлора/Маклорена, таблиц есть ещё CORDIC
Можно ещё формулу Герона, пофиг, что там деление есть. Будет быстрее и точнее. Степенные ряды в выражениях с корнями обычно плохо работают, малый радиус сходимости и сама сходимость небыстрая. Хотя, всё определяет контекст, где-то и ряд Тейлора в линейном приближении сработает отлично.
xepp вне форума   Ответить с цитированием
Старый 15.02.2017, 16:16   #18
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Квадратные корни и не только

Квадратные корни для целочисленной арифметики уже когда-то выкладывал:
Код:
/*============================================================================*/
// корень квадратный SQRT ~550 cycles (вроде для АРМ)
unsigned int sqrt_int(unsigned int Val)
{  
  unsigned int Root;
  unsigned int tmp;

//  tmp  = 32768;              // MaxRoot/2
//  tmp  = 8192;              // MaxRoot/2
  tmp  = 16384;              // MaxRoot/2
  Root = 0;                 // start value

  while(tmp)
  {
    if( ((unsigned int)(Root+tmp) * (Root+tmp)) <= Val )
      Root+=tmp;
    tmp=tmp>>1;            // /2
  }
  return (Root);           // result
}



/*============================================================================*/
// корень квадратный 
unsigned int sqrt_ll(unsigned long long Val)
{  
  unsigned long long Root;
  unsigned long long tmp;

  tmp  = 0x80000000;              // MaxRoot/2
  Root = 0;                 // start value

  while(tmp)
  {
    if( ((Root+tmp) * (Root+tmp)) <= Val )
      Root+=tmp;
    tmp=tmp>>1;            // /2
  }
  return (Root);           // result
}
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 17.02.2017, 12:08   #19
ramonchik
Senior Member
 
Регистрация: 01.03.2007
Возраст: 45
Сообщений: 129
Вес репутации: 368/44
ramonchik is just really niceramonchik is just really niceramonchik is just really niceramonchik is just really nice
Отправить сообщение для ramonchik с помощью ICQ
По умолчанию Re: Квадратные корни и не только

для PIC24

Код:
            .global _ulsqrt 

; w0:w1 input value, w0 returns sqrt 

_ulsqrt:
;-- store ---------------------------
            push.d       W2
            push.d       W4
;------------------------------------
            mov         #0x8000, W3 
            clr         W2 
ulsq1:        
            ior         W3, W2, W2 
            mul.uu      W2, W2, W4 
            sub         W0, W4, W4 
            subb        W1, W5, W5 
            bra         C, ulsq2 
            xor         W3, W2, W2 
ulsq2: 
            lsr         W3, W3 
            bra         NZ, ulsq1 
        
            mov        W2, W0
;-- restore -------------------------
            pop.d       W4
            pop.d       W2
;------------------------------------            
            return
ramonchik вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39
Нужна ли МК ОС? syv Инструментарий 179 22.01.2009 10:59


Часовой пояс GMT +3, время: 11:18.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot