Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Квадратный корень
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Pat
Надо извлечь квадратный корень из unsigned long получив тоже unsigned long.
Может есть у кого готовая быстрая (точная) функция, или ответьте.
Какой алгоритм самый быстрый?
Какой самый точный?
И есть ли точный и быстрый? smile.gif
Из сишных библиотек просьба не предлогать, медленно работают smile.gif
YAM
Вариант1

unsigned short sqrt32( unsigned long in) {
unsigned long mask, sqr = 0, temp;
char j=16;

temp = 0xC0000000;
do {
if( ul & temp ) break;
temp>>=2;
} while( --j);
if( j==0 ) return 0; // а можно еще if( j<=8 ) return sqrt16( in);
mask = temp & (temp>>1);
do {
temp = sqr | mask;
sqr >>= 1;
if( temp <= in ) {
sqr |= mask;
in -= temp;
}
mask >>= 2;
} while( --j );
return sqr;
}

Вариант2

ushort iSqrt(unsigned int Val)
{
unsigned int bitSqr = 0x40000000;
unsigned int root = 0;

while (bitSqr != 0)
{
if (Val >= (bitSqr + root))
{
Val = Val - (bitSqr + root);
root = (root >> 1) | bitSqr;
}
else
root = (root >> 1);
bitSqr = (bitSqr >> 2);
}
return(root);
}

типы данных преобразуете сами.....
Pat
Цитата(YAM @ Oct 23 2005, 10:17)
Вариант1

unsigned short sqrt32( unsigned long in) {
    unsigned long mask, sqr = 0, temp;
    char j=16;

    temp = 0xC0000000;
    do {
        if( ul & temp ) break;
        temp>>=2;
    } while( --j);
    if( j==0 ) return 0;  // а можно еще if( j<=8 ) return sqrt16( in);
    mask = temp & (temp>>1);
    do {
        temp = sqr | mask;
        sqr >>= 1;
        if( temp <= in ) {
            sqr |= mask;
            in -= temp;
        }
        mask >>= 2;
    } while( --j );
    return sqr;
}
*

Большое спасибо только скажите что это за преременная ul
if( ul & temp ) break;
temp>>=2;
Pat
Цитата(fontp @ Oct 23 2005, 15:03)

Спасибо, чего то поиском у меня не нашло в форуме
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.