Перейти к содержанию
    

А как кто решает проблемы с дробными частями, ну что там после запятой ?

Потому как, например, вышеприведённый пример вычисления корня даёт нам для входного значения "35" - результат "5", то есть 0.916... остались неучтёнными..

 

Ну либо на входе использовать x*2^2n а потом результат поделить на 2^n,

Либо модернизировать алгоритм, что бы он и дальше молотил до n-го знака после запятой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Либо модернизировать алгоритм, что бы он и дальше молотил до n-го знака после запятой.

а каким образом - не подскажите?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а каким образом - не подскажите?

 

Ну по сути здесь это однофигственно увеличению разрядности переменной, которую в квадрат возводят и увеличению счетчиков.

 

Иногда удобнее с плавающей точкой, там стандартный корень на фиксированные 54 или 25 бит по сути для мантиссы и сдвиг для экспоненты...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну по сути здесь это однофигственно увеличению разрядности переменной, которую в квадрат возводят и увеличению счетчиков.

А почему вы так считаете?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MODIFIED NON-RESTORING SQUARE ROOT ALGORITHM (алгоритм)

просто дал ссылку...

 

Вроде данный алгоритм целочисленный, а в конце приводится результаты для фиксированной точки - и это мне не понятно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как кто решает проблемы с дробными частями, ну что там после запятой ?

Потому как, например, вышеприведённый пример вычисления корня даёт нам для входного значения "35" - результат "5", то есть 0.916... остались неучтёнными..

Я кажется понял как это сделать... :)

Сдвгаем число на 2N разряда влево, производим операцию целочисленного извлечения корня. Результат сдвигаем на N разряда вправо.

Например мы хотим найти корень из 35 (0010 0011).

Производим сдвиг например на 2 разряда влево, получаем 140 (1000 1100).

Находим корень из 140. Результат 11 (1011)

Результат сдвигаем на 1 разряд вправо - получаем 101,1 (5,5).

 

Если взять например 8 разрядов для сдвига влево и проделать выше сказанное, тогда в итоге получим 101,1110 (5,875)

Точность получилась выше

 

Если брать 16 разрядов для сдвига влево и проделать выше сказанное, тогда в итоге получим 101, 1110 1010 (5,89453125)

Точность получилась еще выше

 

Как-то так... Вроде правильно...

 

upd

Честно сообщение Mogwaika не читал ... только когда выложил свое сообщение - увидел его...

Можно сказать что мое сообщение более подробно дает объяснение...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...