|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Приближённое вычисление математических функций для калькулей
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я тут не просто поехидствовал из вредности, как может показаться... Просто алгоритм для арифмометра Однера (aka ФеликсЪ) - это тоже математически какой-то ряд, но в инструкции к арифмометру об этом не писали, а просто привели алгоритм. Так что сколько раз "покрутить ручку", это как я полагаю, за сколько итераций ряд сходится. И вряд ли для железки с ручкой предлагали алгоритм с плохой сходимостью, хотя, как я понимаю, специфика этого "железного калькулятора" также предъявляла к алгоритму свои требования...
_________________ iLavr
|
08 Feb 2023 07:37 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Что-то мне даже самому интересно стало... вот тут некто математику этой затеи расписывает: Математика для всех. Квадрат числа: интересное свойство
_________________ iLavr
|
08 Feb 2023 09:54 |
|
|
Andnor
Fanat
Joined: 01 Jan 2023 11:37 Posts: 80
|
Ну да, но не все ряды одинаково полезны. Ну тут же очевидно что для получения n² по этой формуле нужно сложить n чисел. Если приближенно вычислять, то для двух цифр понадобится от 10 до 99 сложений. Поэтому я и говорю, что метод фигня. По формуле квадрата суммы сходится гораздо быстрее, и эта формула тоже из курса школьной математики где-то за 7-й класс. Вот ещё пример покажу. Предположим, нужен корень 19619 1. Для получения первой цифры убираем по две цифры справа пока не останется одна или две: 1, убрано 4 цифры. Значит первое приближение: 100 2. По формуле квадрата суммы получаем следующее приближение: (19619 - 100²)/(2*100)+100 = 148.095. Цифры после запятой отбросим, так как я в уме считаю, да и благодаря формуле ошибка постепенно исправится. 3. 148²=21904, теперь можно по формуле квадрата разности: 148-(148²-19619)/(2*148)≈140.280, думаю можно опять отбросить то что после запятой. 4. 140²=19600, уже очень близко. Опять формула квадрата суммы: (19619 - 140^2)/(2*140)+140 ≈ 140.067857. Как видим, до целых ответ получен, можно попробовать ещё уточнить. 5. 140.067857² = 19619.004564572449, уже и так неплохо, но ладно: 140.067857-(140.067857^2-19619)/2/140.067857 ≈ 140.067840705853. Ну тут уже точности за глаза. И это всего пять итераций. В целом это всё линейная интерполяция по производной функции y=x²: y'=2x. На арифмометре для того чтобы получить 140², тебе бы пришлось сделать 140 сложений. На арифмометре ты задолбаешься. Проще напрямую 140 умножить на 140, понадобится всего пять оборотов ручки.
|
11 Feb 2023 04:58 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Во-перых, не "тыч" мне, я не давал тебе для этого поводов... и слова выбирай культурней - тебя здесь читает много посетителей... Во-вторых, как человек, у которого мозг начисто отформатирован Паскалем, вы всё время путаете тёплое с мягким. Во времена арифмометра Однера (aka ФеликсЪ) других аппаратных средств для производства вычислений не было. И я не думаю, что инструкцию к нему писали люди, изучавшие Паскаль. Если метод был удобен в то время для арифмометра, его и предложили использовать.
_________________ iLavr
|
12 Feb 2023 06:03 |
|
|
Andnor
Fanat
Joined: 01 Jan 2023 11:37 Posts: 80
|
Ну во-первых, я хотя бы видел этот арифмометр вживую и даже что-то считал на нём - я представляю, как это делается.
Во-вторых, для арифмометра можно использовать те же алгоритмы вычисления корня, что и вручную, просто считать при необходимости на арифмометре, а не столбиком.
Вот и попробуйте оба метода на бумаге ручкой. Посчитайте корень квадратный от какого-нибудь числа хотя бы до четырёх-пяти знаков после запятой. Увидите сами, как проще и быстрее и вопросы отпадут. Моя формула вот: r_next:=r-(r^2-t)/2/r; r — текущая итерация корня, t — число, от которого берётся корень.
P.S. Вообще, как оказалось, она эквивалентна методу Герона. Вот ещё два варианта той же формулы: r_next=r/2+t/2/r r_next=(r²+t)/2/r
В общем же метод Герона - это каждый раз брать среднее арифметическое между r и t/r.
|
12 Feb 2023 08:01 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я его не то что видел " вживую и даже что-то считал на нём", я его просто каждый день вижу, поскольку он есть у меня на работе в качестве раритета, и работают со мной коллеги, которые во времена своей молодости только на нём и на логарифмической линейке считали... Поэтому я тоже не считаю зазорным уметь и то и другое. Во времена моего 1 курса в ВУЗе линейка была еще весьма актуальна. Вот спасибо-то вам! А мы ведь и не знали! Это просто счастье, что явились вы и нас просветили! В качестве ответного жеста благодарности я вам поведаю, что для простых микропроцессоров, у которых есть лишь операции сложения и вычитания, " можно использовать те же алгоритмы вычисления корня, что и вручную," просто считать при необходимости следует на встроенном Бейсике, а не столбиком. И я вас со всей ответственностью заверяю, что это и удобнее и быстрее, чем на арифмометре! Я просто не представляю, зачем мне это? Я в тематическом топике Приближённое вычисление математических функций для калькулей рассказал об интересном методе вычисления квадратного корня, о котором, я более чем уверен, не знал никто, в том числе и вы. А то, что вы настырно излагаете, известно (или должно быть известно) большинству людей с техническим высшим образованием. Никакую " терра инкогнита" вы никому не открыли...
_________________ iLavr
|
12 Feb 2023 09:02 |
|
|
Andnor
Fanat
Joined: 01 Jan 2023 11:37 Posts: 80
|
Ну хорошо, есть способ — складывать нечётные числа. Но его сложность экспоненциально растёт от количества цифр в корне. Например для нахождения одной значащей цифры нужно сложить от одного до девяти чисел, а для нахождения двух уже от 10 до 99 чисел и так далее. В то же время, алгоритм Герона очень быстро сходится. Более быстрые алгоритмы есть, но они очень специлизированные, например знаменитый алгоритм из исходников doom.
Что сумма последовательных нечётных чисел даёт полные квадраты я знал давно, это совсем не секрет, а вот применять это для вычисления квадратного корня я не догадался, да. Я и хотел уточнить насчёт практической применимости этого алгоритма. Или кто-то просто предложил его, не оценивая необходимые вычислительные ресурсы — работает и ладно?
|
14 Feb 2023 09:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Зато красиво и нестандартно
|
14 Feb 2023 20:39 |
|
|
Andnor
Fanat
Joined: 01 Jan 2023 11:37 Posts: 80
|
Кажется, я разобрался в том, как пользоваться методом цифра-за-цифрой. Метод опять же основан на формуле квадрата суммы: (10x+y)²=100x²+20xy+y²=100x²+(20x+y)*y. Вначале записывается √число, число разбивается на двойки цифр, отсчитываемые от запятой влево и вправо. Затем по первой двойке подбирается однозначное число, чтобы его квадрат был меньше, но квадрат следующего был больше. Это легко сделать зная таблицу умножения, или хотя бы её главную диагональ: 1 4 9 16 25 36 49 64 81..., ну а при её незнании можно воспользоваться суммой последовательных нечётных чисел. Это число будет первой значащей цифрой результата. Его записывают, например, над числом. Ну или можно справа от числа, как при делении уголком. Далее сносятся две цифры (если цифры кончились, но надо продолжать, то 00), а имеющийся результат умножается на 20 с игнорированием запятой. Например цифра 5 уже есть, значит умножаем на 20, получаем 100. У нас есть 412, но 104*4 = 416, значит берём по 3, затем целая часть результата кончается, ставится десятичная точка и процедура повторяется: 53*20=1060, берём по 9, получаем 1069*9 = 9621 и так далее, если даже 1 не подходит, то в результат добавляется ноль и сносится только одна цифра, а в следующий раз сносится уже три цифры... Вот с этим я пока не совсем разобрался.
|
15 Feb 2023 03:22 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 871
|
А раньше это кажется в четвёртом классе проходили... Между прочим, в двоичной системе подбор будет тривиальным, всего одно сравнение. Помнится, писал я реализацию такого алгоритма для нашего любимого КР580ВМ80А. Для 16-битного числа всего 8 итераций.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
15 Feb 2023 08:17 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
В школе такое не давали, но помню вроде алгоритм ручного расчёта корня двойками был в каком-то советском журнале - то ли Квант, то ли ещё какой-то...
|
15 Feb 2023 09:04 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 871
|
Может и так. У нас видимо училка по математике продвинутая была. Хотя может в 60-х - 70-х годах была такая тема на уроках арифметики. Я ещё удивлялся, что ученики того времени умели больше (без подручных средств типа калькулятора), чем мы. Я ещё таблицы Брадиса застал
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
15 Feb 2023 11:36 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А теперь смотрим, как на арифмометре Одонера (aka Феликсъ) выполняется деление. Andnor пишет, что считал на нём, но, видимо, подзабыл... Алгоритм-то может и быстро сходится, но и на компьютерах, где лишь сложение и вычитание, деление не самая быстрая операция... А уж на арифмометре Одонера... - пусть сам Andnor делит... Кстати говоря, метод со сложением нечетных - похоже единственный метод, не использующий деление. На арифмометре его не зря рекомендуют! Даже думать не надо - каждое следующее число - это счетчик оборотов х 2 + 1, и крути ручку... Арифмометры не для того придумали, чтобы считать в уме или на бумажке... Есть и обратный его вариант:
_________________ iLavr
|
16 Feb 2023 23:21 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А вы скачайте и почитайте " умну книжку - Паталогии безмозглых" (с) ( щютка)
_________________ iLavr
|
16 Feb 2023 23:30 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Тут ещё в тему логарифмов вот попалось, может тебе будет интересно:
_________________ iLavr
|
16 Feb 2023 23:46 |
|
|
Who is online |
Users browsing this forum: No registered users and 14 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|