реклама на сайте
подробности

 
 
> Очень нужна помощь в оптимизации алгоритма извлечения квадратного корня
Rostislav
сообщение Dec 4 2012, 22:16
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 6-07-08
Из: Москва
Пользователь №: 38 765



Ребята, всем привет! Помогите, пожалуйста оптимизировать алгоритм извлечения корня. А то что-то до фига получается циклов вычисления. Заранее огромное спасибо всем откликнувшимся!

Алгоритм простой, основан на методе последовательного приближения. Собственно вот он (без шелухи):

bprev:=bprev div 2;
if (b+bprev)*(b+bprev) > a then
b:=b-bprev
else
if (b+bprev)*(b+bprev) < a then
b:=b+bprev
else
выход;
повтор цикла....

Полный текст:

a:word;
b:word;
bprev:word;
cnt:word;

a:=strtoint(edit1.Text); // подкоренное выражение
b:=a; // в b хранится результат
bprev:=a;
cnt:=0;
while 1=1 do begin
cnt:=cnt+1; // Счетчик циклов
bprev:=bprev div 2;
if bprev=0 then begin
bprev:=1;
if ((b+1)*(b+1) > a) and ((b+0)*(b+0) < a) then break;
end;
if (b+bprev)*(b+bprev) > a then
b:=b-bprev
else
if (b+bprev)*(b+bprev) < a then
b:=b+bprev
else
break;
end;
b:=b+bprev;
Form1.Caption:='результат: '+inttostr(b)+' циклов: '+inttostr(cnt);

Результаты замера следующие:
sqr (1) - 2 цикла;
sqr (10) - 5 циклов;
sqr (100) - 5 циклов;
sqr (1000) - 13 циклов;
sqr (10000) - 38 циклов;
sqr (32000) - 73 цикла;
...

Алгоритм предложенный alexeyv:

i:=1; // результат в i
b:=1;
a:=10000; // подкоренное выражение
while 1=1 do begin
if (b > a) or (b = a) then break;
b:=b+2;
a:=a-b;
i:=i+1;
end;
caption:=inttostr(i);

sqr (10000) - 100 циклов.

Сообщение отредактировал Rostislav - Dec 5 2012, 07:35
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rostislav   Очень нужна помощь в оптимизации алгоритма извлечения квадратного корня   Dec 4 2012, 22:16
- - alexeyv   Если нужна только целая часть квадратного корня, т...   Dec 5 2012, 03:37
|- - Rostislav   Цитата(alexeyv @ Dec 5 2012, 06:37) 1 = 1...   Dec 5 2012, 06:09
|- - Tanya   Цитата(Rostislav @ Dec 5 2012, 10:09) Заб...   Dec 5 2012, 06:28
- - Rostislav   Что забавляет? Все)) Магия чисел в особенности)) ...   Dec 5 2012, 06:55
|- - MrYuran   Цитата(Rostislav @ Dec 5 2012, 10:55) Где...   Dec 5 2012, 06:59
- - Rostislav   Кстати, детская арифметика заканчивается начиная с...   Dec 5 2012, 07:11
- - skyv   Я использовал просто таблицу, которую предваритель...   Dec 5 2012, 10:59
|- - Rostislav   Цитата(skyv @ Dec 5 2012, 13:59) Я исполь...   Dec 5 2012, 11:04
|- - Lmx2315   QUOTE (Rostislav @ Dec 5 2012, 15:04) А В...   Dec 5 2012, 11:14
|- - skyv   Цитата(Lmx2315 @ Dec 5 2012, 15:14) ..мог...   Dec 6 2012, 10:52
- - MrYuran   Можно скомбинировать. Таблицу для грубого опреде...   Dec 5 2012, 11:28
|- - Rostislav   Цитата(MrYuran @ Dec 5 2012, 14:28) Можно...   Dec 5 2012, 11:39
- - sysel   Не знаю, как называется метод, но пашет: Код// Выч...   Dec 5 2012, 13:56
- - анатолий   Вот функция корня по алгоритму CORDIC Кодfunction ...   Dec 8 2012, 21:23
|- - Rostislav   Цитата(анатолий @ Dec 9 2012, 00:23) Вот ...   Dec 11 2012, 06:07
|- - анатолий   Цитата(Rostislav @ Dec 11 2012, 08:07) чт...   Dec 11 2012, 19:16
- - TSerg   Кодfunction intSqrt_(Val : Longword) ...   Dec 11 2012, 11:41
|- - akorud   Есть возможность использовать floating-point? Може...   Dec 11 2012, 18:41
- - VitekSVM   http://algolist.manual.ru/maths/count_fast/index.p...   Dec 20 2012, 13:41
- - ASN   Rostislav С какой практической точностью нужно выч...   Dec 20 2012, 14:38
|- - Rostislav   Цитата(ASN @ Dec 20 2012, 17:38) С какой ...   Dec 20 2012, 20:46
|- - beaRTS   Цитата(Rostislav @ Dec 21 2012, 00:46) [c...   Dec 21 2012, 02:07
|- - Rostislav   Цитата(beaRTS @ Dec 21 2012, 05:07) temp ...   Dec 21 2012, 05:56
|- - beaRTS   Цитата(Rostislav @ Dec 21 2012, 08:56) Да...   Dec 21 2012, 06:16
|- - Rostislav   Цитата(beaRTS @ Dec 21 2012, 09:16) а, ну...   Dec 21 2012, 06:19
- - blackfin   Сто раз уже обсуждали: ReAl.   Dec 21 2012, 06:19
|- - Rostislav   Цитата(blackfin @ Dec 21 2012, 09:19) Сто...   Dec 21 2012, 06:24
|- - beaRTS   Цитата(blackfin @ Dec 21 2012, 09:19) Сто...   Dec 21 2012, 06:27
|- - Rostislav   Цитата(beaRTS @ Dec 21 2012, 09:27) ...я ...   Dec 21 2012, 06:31
- - TSerg   Топик-стартер слушает только себя в попытке изобре...   Dec 21 2012, 07:12
|- - Rostislav   Цитата(TSerg @ Dec 21 2012, 10:12) Топик-...   Dec 21 2012, 11:10
|- - beaRTS   Цитата(Rostislav @ Dec 21 2012, 14:10) ЗЫ...   Dec 22 2012, 08:50
|- - beaRTS   Цитата(Rostislav @ Dec 21 2012, 14:10) ЗЫ...   Dec 22 2012, 09:01
|- - TSerg   Цитата(Rostislav @ Dec 21 2012, 15:10) Ва...   Dec 22 2012, 17:47
- - Rostislav   TSerg, Ваш вариант описывается тут: http://en.wiki...   Dec 22 2012, 08:25
- - beaRTS   по поводу своей идеи начал новую тему. вот здесь к...   Dec 22 2012, 16:06


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 13:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016