spamsink: (Default)
[personal profile] spamsink

Помните историко-математический анекдот про знаменательное событие 1917 года, повлиявшее на всю последующую жизнь?





Так вот, кстати о "тригонометрических" "рядах" (кавычки - во избежание придирок от пуристов).

Небезызвестный Эдсгер Дейкстра приводит в своих записях начала 1960-х следующий способ приближённого вычисления арктангенса (в переложении на Си):

double arctan(double x) {
    int k;
    double a;
    double b[5];
    a = 1;
    b[0] = sqrt(1+x*x);
    for (k = 0; k < 4; ++k) {
        a = (a+b[k])/2;
        b[k+1] = sqrt(a*b[k]);
    }
    return x/(  0.725940450930260474 * b[4]
              + 0.121226383895580607 * b[3]
              + 0.076666493927018208 * b[2]
              + 0.038082414120083668 * b[1]
              + 0.019042129239613251 * b[0]
              + 0.019042127887443791 );
}


Во первых строках скажу, что эта халабуда работает. В диапазоне от 0 до 1000 максимальная наблюдённая относительная ошибка составляет меньше ⏨-12, что как раз соответствует разрядности представления чисел с плавающей точкой, использованной в той машине, для которой всё и делалось (мантисса 40 бит).

Понимающие могли бы задаться как минимум тремя вопросами:

  • какого бы рожна константы приведены с точностью 18 десятичных цифр, если 60-битной или более мантиссы до появления 80-битного long double не бывало;
  • и какого бы рожна использован безумный алгоритм, годный для всего диапазона, если проще было бы для аргумента, большего 1, вычислять π/2-arctan(1/x), а график функции арктангенса на отрезке от 0 до 1 достаточно простой и гладкий, чтобы приближаться с нужной точностью гораздо более простой формулой, чем использованная;
  • и неужели о переполнении тогда заботиться было не принято (аргумент тут же возводится в квадрат, и будь что будет)?


Кто, вообще, придумал подобный способ, и откуда он берётся? Нет чтобы полиномами или рациональными функциями аппроксимировать, как люди.

Оцените вид страницы рабочей тетради и почерк (впрочем, самого Дейкстры или нет - неизвестно):


А теперь найдите вверху дату записи.

Date: 2024-08-09 11:54 am (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Красотища. Дийкстра отпраздновал.
Я когда-то просто считал через ряд, выбрав хороший сегмент, где почти линейно (а остальное через формулы).

Date: 2024-08-14 07:35 pm (UTC)
pappadeux: (Default)
From: [personal profile] pappadeux
Нет, это не почерк Дейкстры

У него настолько оригинальный (чистый почерк), что кто-то сделал фонт

https://fontsgeek.com/fonts/Dijkstra-Regular

Profile

spamsink: (Default)
spamsink

May 2026

S M T W T F S
     12
3456789
10111213141516
17181920 212223
2425262728 2930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 1st, 2026 05:35 pm
Powered by Dreamwidth Studios