Сокровище Рамануджана

09.05.14

Разработка - Математика и алгоритмы

Как разделить единицу на пи с точностью до 100 знаков и сколько будет Tg(10¹°°).

В воспоминаниях Ричарда Фейнмана есть такой эпизод.

” Пол проходит по столовой, где все просто стоят на ушах. “Эй, Пол! – кричат они. – Фейнман – просто супер! Мы даем ему задачу, которую можно сформулировать за десять секунд, и он за одну минуту дает ответ с точностью до 10 процентов. Дай ему какую-нибудь задачу!” Почти не останавливаясь, он говорит: “Тангенс 10 градусов в сотой степени”. Я влип: для этого нужно делить на число пи до ста десятичных разрядов! Это было безнадежно!”.

В приведенном фрагменте переводчик ошибся. Пол Олам просит Фейнмана вычислить тангенс числа 10 в сотой степени. И речь идет о радианах, а не градусах. Именно в такой формулировке задача становится неподъемной для будущего нобелевского лауреата.

В уме такое решить нельзя, зато оказывается подобные расчеты можно провести с помощью 1С. Автором формулы, которую я использовал является поразительный индийский математик Рамануджан. Не буду излагать его жизнь и результаты, все это есть в Сети. Скажу только, что это удивительный человек, который образно говоря, «разговаривал» с числами, причем каждое натуральное число было его личным другом. Будучи очень религиозным человеком, Рамануджан, по видимому, видел в мире чисел и в отношениях, которыми этот мир пронизан, проявление божественной гармонии и красоты. И раз Всевышний говорит с нами через откровения, то такой же подход Рамануджан использовал к изучению математики. «Его понимание сущности математического доказательства было более чем туманным; он пришел ко всем своим результатам, как ранним, так и более поздним, как верным, так и неверным, при помощи странной смеси интуитивных догадок, индуктивных соображений и логических рассуждений». Так говорил его современник. А теперь формула Рамануджана:

Формула Рамануджана

С моей точки зрения это что-то невозможное! Обычный человек не в состоянии прийти к такому выражению. При этом надо учесть, что до 27 лет Рамануджан занимался математикой сам для себя, не имея контакта с серьезными специалистами. 
Все расчеты я проводил на платформе 1С: Предприятие, редакция 8.2. Спасибо разработчикам, что они реализовали в программе длинную математику для умножения и сложения, это очень упрощает жизнь. Для деления есть ограничение в 27 знаков после запятой, поэтому деление пришлось реализовать самому. Но обо всем по порядку. 
Первая задача – уметь вычислять √2 с любой точностью. Для этого обычно ищут ноль следующей функции:
f(x)=x²-2,
С этой целью используют итерационную формулой Герона, в которой a=2:

Формула Герона

Но если у вас нет длинного деления, когда вы можете указать количество значащих цифр после запятой, то точность вычислений по данной формуле будет ограничиваться точностью деления, которая реализована в системе. В 1С это 27 знаков и именно такую минимальную погрешность я смог получить. Тогда я решил проверить, как будет работать разложение в ряд Тейлора для функции квадратный корень из (1+х). Ниже приводится соответствующая формула для разложения.

Разложение в ряд Тейлора

Отметим, что каждый последующий член ряда отличается от предыдущего знаком и коэффициентом 0.5*x*(2-3/n). Корень из двух я планировал получить, используя тождество:

Тождество для вычисления корня из 2

С этой целью значение ряда вычислим в точке 1/49. Для того, чтобы обойти ограничения на точность конечного результат от представления результатов деления, число 1/49 будем представлять следующим образом. Дробь 1/7 имеет период 142857, поэтому сначала сформируем десятичную запись данной дроби с количеством знаков после запятой, которое определяется требуемой точностью расчетов, затем полученное значение умножим само на себя. А вот множитель (2-3/n) я оставил таким, какой он есть. Формула готова осталось проверить, как она работает. Результат я сравнивал с данными, которые выдает www.wolframalpha.com. Для точности в 100 знаков после запятой потребовалось 57 членов ряда, результат совпал с эталонным значением. По-видимому, я стал первым человеком на планете, который провел вычисление корня из двух в 1С с такой точностью. 

Результат расчета корня из 2

 Это был  первый шаг к использованию формулы Рамануджана. Последующие эксперименты показали, что без реализации длинного деления продвинуться за 27 значащих цифр нельзя. Поэтому я написал функцию ДлинноеДеление, которая вычисляет дробь 1/x, где натуральное число х это первый аргумент функции, а количество знаков после запятой — второй. Проверку правильной работы данного алгоритма рекомендую проводить на выражении 1/9801, результат некоторых думаю удивит.

Функция ДлинноеДеление(вхЗнаменатель,вхТочность) экспорт
    перем выхРезультат;
    
    если вхЗнаменатель=1 тогда
        возврат 1;
    конецесли;	
    
    
    выхРезультат=новый массив;
    мЧислитель=10;
    пока Истина цикл
        пока мЧислитель=вхЗнаменатель цикл
            мЧислитель=мЧислитель-вхЗнаменатель;
            число=число+1;
        конеццикла;
        
        пока число<>0 цикл
            остаток=число%10;
            выхРезультат.Добавить(остаток);
            число=(число-остаток)/10
        конеццикла;
        
        
        если мЧислитель=0 тогда
            прервать;
        конецесли;
        
        если выхРезультат.Количество()>=вхТочность тогда
            прервать;
        конецесли;
        мЧислитель=мЧислитель*10;
    конеццикла;
    
    результат=0;
    разряд=0.1;
    для каждого цифра из выхРезультат цикл
        результат=результат+разряд*цифра;
        разряд=разряд*0.1;
    конеццикла;	
    возврат результат;
КонецФункции

Теперь формула, которую открыл Сриниваса Рамануджан Айенгор показала всю свою мощь. Проверка полученного числа проводилась опять с помощью www.wolframalpha.com

 

Результат вычисления 1 делить на пи

После этого уже не было никаких преград для определения значения  tg(10¹ºº). Попытаемся сделать устную оценку. В выражении (10¹ºº/пи)*пи я отбросил целое количество пи, и оставил 0.12*пи. Первый член в разложении tg(x), который равен х, дает нам следующее приблжение:

0.12*пи=3/25*пи≈3*1/8=3*0,125=0,375.


Если учесть второй член разложения, то к приведенному значению надо будет добавить (0,375)³/3. Заменяем выражение в скобках на 0.4, выполняем элементарные операции и получаем 0,021. Тогда уточненная оценка будет 0,396. На этом и остановимся.

Данная статья является примером того, как в 1С выполнять вычисления с любой заданной точностью.  Оказывается, что при небольших усилиях длиную математику  можно реализовать и на данной платформе. Для меня это было небольшим открытием, которым я и поделился.


Длинная математика

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1756    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4427    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7466    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7856    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4448    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8846    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7812    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. утюгчеловек 38 18.05.14 15:01 Сейчас в теме
Формула - действительно что-то невообразимое.

Насколько я понял, задача публикации показать способ обхода проблемы длинного деления в рамках платформы. То есть вычисление корня из двух и величины обратной пи - не было самоцелью.
Тогда такой вопрос, а альтернативные способы обхода проблемы вычисления вы не рассматривали? По-моему первое что приходит в голову это ВК. Есть же шаблоны Native ВК, есть COM-ВК, создать жупел которой можно за 10 минут с закрытыми глазами. И уж там-то, в свободном полете, подключай/реализуй библы и дели-нехочу. Причем таким макаром обходятся, на мой взгляд, все математические проблемы, стоящие на пути аналитика.
2. Evil Beaver 8108 19.05.14 14:18 Сейчас в теме
3. agrustny 19 19.05.14 16:11 Сейчас в теме
Обычный человек не в состоянии прийти к такому выражению.

Не, не в состоянии
4. DrAku1a 1679 19.05.14 17:20 Сейчас в теме
Красиво, познавательно, однозначно плюс.
А теперь вопрос от физиков к математикам: ГДЕ И КАК можно ПРИМЕНИТЬ данные знания?
5. agrustny 19 19.05.14 19:56 Сейчас в теме
(4) Там же, где и формулу sin(x)=x, смекаете?
6. Makushimo 160 28.05.14 09:18 Сейчас в теме
Оставьте свое сообщение