Mogwaika 0 23 июля, 2013 Опубликовано 23 июля, 2013 · Жалоба А как кто решает проблемы с дробными частями, ну что там после запятой ? Потому как, например, вышеприведённый пример вычисления корня даёт нам для входного значения "35" - результат "5", то есть 0.916... остались неучтёнными.. Ну либо на входе использовать x*2^2n а потом результат поделить на 2^n, Либо модернизировать алгоритм, что бы он и дальше молотил до n-го знака после запятой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 23 июля, 2013 Опубликовано 23 июля, 2013 · Жалоба Либо модернизировать алгоритм, что бы он и дальше молотил до n-го знака после запятой. а каким образом - не подскажите? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mogwaika 0 23 июля, 2013 Опубликовано 23 июля, 2013 · Жалоба а каким образом - не подскажите? Ну по сути здесь это однофигственно увеличению разрядности переменной, которую в квадрат возводят и увеличению счетчиков. Иногда удобнее с плавающей точкой, там стандартный корень на фиксированные 54 или 25 бит по сути для мантиссы и сдвиг для экспоненты... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 24 июля, 2013 Опубликовано 24 июля, 2013 · Жалоба Ну по сути здесь это однофигственно увеличению разрядности переменной, которую в квадрат возводят и увеличению счетчиков. А почему вы так считаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 26 июля, 2013 Опубликовано 26 июля, 2013 · Жалоба MODIFIED NON-RESTORING SQUARE ROOT ALGORITHM (алгоритм) просто дал ссылку... Вроде данный алгоритм целочисленный, а в конце приводится результаты для фиксированной точки - и это мне не понятно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 июля, 2013 Опубликовано 27 июля, 2013 · Жалоба А как кто решает проблемы с дробными частями, ну что там после запятой ? Потому как, например, вышеприведённый пример вычисления корня даёт нам для входного значения "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 не читал ... только когда выложил свое сообщение - увидел его... Можно сказать что мое сообщение более подробно дает объяснение... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться