Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Есть у меня книжка, купленная в библиотеке УПИ в конце 90х за 50 копеек по причине списания про стандартные математические функции системы М-7000 для СМ ЭВМ и там есть алгоритмы приближённого вычисления логарифмов, экспоненты, корня, синуса, тангенса и т.д. - я хочу их задействовать в собственных программах для гипотетического калькулятора (например троичного). Проблема лишь в том, что информация там не совсем полная для некоторых функций, например синус-косинус вычисляется путём вызова функции CHEBY, которой нужны коэффициенты, обозначенные в книжке просто как C0, C1, C2 ... Cn - пришлось поискать в интернете и вот что нашлось: https://3ys.ru/chislennye-metody-v-zadachakh-matematicheskogo-analiza/mnogochleny-chebysheva.htmlтут последнее слагаемое отбрасывается и получается точность 3.51E-9 (если надо точнее, то надо вычислить и подставить T11, T13 и т.д.)
|
13 Aug 2020 00:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
На самом деле по книжке чебышев вычисляется как T[i] = 2xT[i-1]-T[i-2]+C[i], где T[0]=0 и T[1]=1 и результат выдаётся как (T[n]-T[n-2])/2 А для вычисления синуса по книжке оно вызывается так: A=x*2/pi B=A-4*int((A+1)/4) если B>1, то B=2-B и результат sin(x) равен CHEBY(2*B^2-1) Получается коэффициенты из предыдущего сообщения надо пересчитать чтобы подставлялись вместо C[i] при таком подходе T[0]=0 T[1]=1 T[2]=2xT[1]-T[0]+C[2]=2x-0+C[2]=2x+C[2] T[3]=2xT[2]-T[1]+C[3]=2x*(2x+C[2])-1+C[3]=4x^2+C[2]*2x+C[3]-1 T[4]=2xT[3]-T[2]+C[4] и т.д.
|
13 Aug 2020 00:26 |
|
|
Konstantin18
Maniac
Joined: 15 Jan 2019 15:48 Posts: 325 Location: Украина, Луганская обл.
|
А как же ряды Тейлора ? Это я к тому, что для целочисленных аргументов можно свести к целочисленной математике. Пример для синуса: https://wikimedia.org/api/rest_v1/media/math/render/svg/b89940045b13c9bcd33512a3051b8869086947ed
|
13 Aug 2020 00:52 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Ряды Тейлора вроде имеют неравномерную погрешность на покрываемой оси входных значений - Чебышев как-бы более единообразен: ( хотя судя по цифрам коэффициентов - одно на другое очень похоже : )
|
13 Aug 2020 11:22 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В калькуляторах, насколько я помню, был другой метод, назывался "цифра-за-цифрой"... А вот в чем там суть была, сейчас - убей, не помню..
_________________ iLavr
|
13 Aug 2020 12:21 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Да, натыкался на это тоже, но я хочу универсальную библиотеку сделать - для ретрокомпов тоже, так что по классическому пути пойду
|
13 Aug 2020 20:30 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я единственное что хорошо помню, что реализация метода "цифра-за-цифрой" очень компактна для ограниченных ресурсов калькуляторов. Как-то так... А читать и вспоминать - мне что-то не захотелось...
_________________ iLavr
|
14 Aug 2020 06:55 |
|
|
dvarkin
Fanat
Joined: 05 Jul 2020 14:08 Posts: 87 Location: Ижевск
|
Цифра-за-цифрой чем-то напомнил cordic.
|
15 Aug 2020 22:40 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Читал я статейку про арифмометр Однера (aka ФеликсЪ) и наткнулся на весьма любопытный алгоритм: | | | | Quote: ... квадрат целого числа n равен сумме нечётных чисел от 1 до 2n–1. Например, 25 = 1 + 3 + 5 + 7 + 9. Причём в сумме как раз n слагаемых. Таким образом, для нахождения корня из некоторого числа на арифмометре надо складывать нечётные числа, пока не получится это число. Ответ при этом показывается на счётчике оборотов, на котором отображается число слагаемых. Подробнее см.: https://www.nkj.ru/archive/articles/38885/ (Наука и жизнь, Рождение легенды) | | | | |
_________________ iLavr
|
25 Aug 2022 19:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
А вот интересно можно такой подход на дробные числа распространить? Скажем корень из 27.5 - доходим до 25 (количество оборотов 5) и следующее значение будет 36 (количество оборотов 6) Если взять тупо линейную интерполяцию, то будет 2.5/11=0.227 т.е. приближённый ответ 5.227 а настоящий - 5.244 Можно приближать не линейно, а выпукло...
|
04 Feb 2023 10:42 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Ешё в тему (взято отсюда):
|
04 Feb 2023 19:51 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Мне всё же думается, что эти алгоритмы целочисленные, и "крутить ручку" надо до числа 2750 по меньшей мере, если я не ошибаюсь, а потом вернуть десятичную точку на место.
_________________ iLavr
|
05 Feb 2023 06:42 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Ну да - похоже на правду sqrt(27.5)=5.244 sqrt(2750)=52.44
|
05 Feb 2023 13:22 |
|
|
Andnor
Fanat
Joined: 01 Jan 2023 11:37 Posts: 80
|
52 оборота, да ещё после каждого менять число на следующее нечётное? Да вы задолбаетесь. Лучше методом Ньютона или даже по формуле квадрата суммы:
5^2=25, 6^2=36, первое ближе. (5+x)²=25+10x+x², причём известно, что x<1 и скорее всего намного, поэтому x≈(27.2-25)/10=0.25, то есть sqrt(27.5)≈5.25, если надо точнее, возводим в квадрат по той же формуле, получаем 25+2.5+0.0625 (1/2^n = 5^n/10^n а тут 1/16 была), опять же учитывая, что производная квадрата это 2x, то надо ещё поделить это на 10.5, и получить примерно 0.006, вычесть это получим 5.244. Если трёх цифр после запятой мало, можно дальше считать. Но дальше лучше не считать в уме, а взять арифомометр, а арифмометра нету...
Ну ладно, заменим калькулятором, хотя им я и так уже корень посчитал... 5.244^2 = 27.499536, соответственно не хватает 0.000464, производная 2x, то есть 10.488 в этом районе, делим первое на второе, 0.0000442410, добавляем, выходит 5.244044241, квадратим: 27.500000001565266081. По-моему вполне достаточная точность...
А метод Ньютона - это бинарный поиск. Квадратить каждый результат и брать среднее арифметическое с одним из предыдущих в зависимости от знака.
Last edited by Andnor on 06 Feb 2023 20:11, edited 1 time in total.
|
05 Feb 2023 23:31 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да... это весьма заметно...
_________________ iLavr
|
06 Feb 2023 15:57 |
|
|