Цитата(ASN @ Dec 20 2012, 17:38)

С какой практической точностью нужно вычислять выражение ?
Уважаемый ASN! Мне придумалась еще одна идея. Более простого алгоритма я придумать не смог (кстати, не понятно, почему этот вариант мне раньше не пришел в голову). Но все же отвечу на Ваши вопросы))
Меня интересует целочисленный результат.
Цитата(ASN @ Dec 20 2012, 17:38)

На какой целевой платформе выполняется прикладная программа?
Если вычислительная система поддерживает вычисления с плавающей точкой , то лучше воспользоваться арифметическим сопроцессором (типа сопроцессора для i386) или специальными командами самого процессора (как в TMS320C55).
Меня интересовал вариант, который мог бы выполнятся на микроконтроллерах с простой архитектурой (типа PIC12).
Цитата(ASN @ Dec 20 2012, 17:38)

Если требуется целочисленная арифметика, то проще и быстрее заранее вычисленной таблицы в памяти что-то предложить сложно.
Таблицы сразу не понравились. Для них нужна память.
----
Итак, мое заднее)))) предложение:
Код
a : Word; // подкоренное выражение
b : Word; // результат
n : Byte;
a := 121;
b := 0;
// начало
for n := 15 downto 0 do // Счет от 15 до 0 // 15 - разрядность подкоренного выражения (вернее N не 15, а N=15+1)
begin
if ((b + 1 shl n) * (b + 1 shl n) < a) or // shl - побитовый сдвиг влево на n бит
((b + 1 shl n) * (b + 1 shl n) = a) then
begin
b := b + 1 shl n;
end;
end;
// конец
Form1.Caption := IntToStr (b); // b = 11
Циклов для 16-ти разрядного числа 16!!!
для 32-х разрядного числа 32!!!!!!
По-моему, получилось красиво))) Операции умножения можно заменить на бинарное сложение столбиком с предварительным смещением бит влево. Если более оптимального алгоритма наука)) еще не придумала, то тему можно закрывать. Теперь возьмусь за вычисление тригонометрических функций)))) Всем спасибо!!!!!
Сообщение отредактировал Rostislav - Dec 20 2012, 21:57