Как вычисляется корень квадратный арифметический в компьютере? задан 28 Фев '12 13:36 barabanov
показано 5 из 7
показать еще 2
|
Итерационной процедурой b(n+1)=(b(n)+a/b(n))/2, она сходится к b=sqrt(a) и есть в системе команд любого процессора. Но есть и команда вычисления a^s при любом s, включая s=1/2, через ряд экспоненты. отвечен 28 Фев '12 14:13 Андрей Юрьевич @Андрей Юрьевич, скажите пожалуйста, каким образом устанавливается начальное приближение b(0)?
(28 Фев '12 19:23)
BuilderC
В общем-то, процесс сходится при любом начальном приближении (кроме 0). По-моему, в процессорах заделывается b(0)= a/2, но точно сказать не могу.
(28 Фев '12 21:30)
Андрей Юрьевич
|
Можно ограничить аргумент значениями от 0 до 1 и приводить к нему все аргументы большей размерности $%\sqrt{a} = n\sqrt{b}, b \in (0;1)$%. Тогда $%\sqrt{b}$% считается
отвечен 28 Фев '12 21:22 Васёк Насколько я понял, вопрос был об алгоритмах, реально реализованных в математическом сопроцессоре компьютера. Предложенный Вами алгоритм не очень эффективен, т.к. ряд слишком медленно сходится. Что касается таблицы - все равно между узлами нужно интерполировать, но сама идея используется, например, при вычислении экспоненты.
(28 Фев '12 21:40)
Андрей Юрьевич
|
Андрей Юрьевич,
Квадратный корень непосредственно в процессоре вычисляется одним способом, самым быстрым, методом Ньютона. и пока никто не придумает способ быстрее и практичнее, будут пользоваться им. отвечен 2 Мар '12 11:49 Гоша Это не совсем так. Если Вы в языке пишете оператор sqrt(2), то, он действительно, транслируется в команду метода Ньютона, но если Вы пишете 2^(1/2), а, тем более, 2^(0.5), то запускается общий алгоритм вычисления степени через экспоненту. Но это все уже зависит от конкретного транслятора. В самом процессоре есть обе возможности, о чем я и написал.
(2 Мар '12 14:07)
Андрей Юрьевич
|
Что значит "в компьютере"? В нем есть:
- встроенный калькулятор, в том числе инженерный
- редактор Excel, в котором можно вычислять разные функции, к том числе КОРЕНЬ()
- разные языки программирования, в которые обычно встроена функция sqrt()
и т.п.
Я думаю, имеется в виду не работа с приложениями, а внутренняя "кухня". Исходя из этого я и ответил на вопрос.
Про Вас-то ясно! А вот понимает ли автор, как следует задавать вопрос - в этом сомнения. Мне почему-то кажется, если автор не может четко сформулировать вопрос, он не сможет понять и ответ. Впрочем, могут быть исключения...
Вот здесь взгляните http://hashcode.ru/questions/60180/%D0%BA%D0%B0%D0%BA-%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4-%D0%BD%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0-%D0%BD%D0%B0-c
Речь идет о разных методах Ньютона. Прямую итерацию для извлечения квадратных корней тоже впервые применил Ньютон (как и метод касательных для решения алгебраических уравнений).
@Андрей Юрьевич, формула "b(n+1)=(b(n)+a/b(n))/2" в Вашем ответе - это в точности метод касательных.
И правда! Почему-то мне это не приходило в голову. Спасибо.