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

Публикация № 275028 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С выполнять вычисления с любой заданной точностью.  Оказывается, что при небольших усилиях длиную математику  можно реализовать и на данной платформе. Для меня это было небольшим открытием, которым я и поделился.


Специальные предложения

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

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

Не, не в состоянии
4. DrAku1a 1590 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 Сейчас в теме
Оставьте свое сообщение

См. также

Мини-обзор разных решений задач

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

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья как мини-круассан на завтрак.

03.04.2023    1635    RustIG    4    

19

Тестирование средств 1С для решения СЛАУ

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

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

23.11.2022    1384    gzharkoj    11    

15

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

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

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

16.12.2021    3171    fishca    13    

35

Установка отбора по списку значений при открытии формы выбора справочника из реквизита обработки

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

Описан алгоритм установки отбора по списку значений при открытии формы выбора справочника. Параметром отбора является список значений передаваемый из одной формы обработки в другую форму этой же обработки. Тестировано под платформу 8.3.18

11.12.2021    7284    prog1c_vl    4    

3

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

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

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

31.08.2021    5293    dusha0020    8    

62

Распределенные алгоритмы РИБ 1С

Математика и алгоритмы Обмен между базами 1C Платформа 1С v8.3 Бесплатно (free)

Небольшое исследование на тему применимости классических распределённых алгоритмов репликации и синхронизации данных между узлами обмена РИБ 1С.

02.07.2021    2128    zhichkin    1    

8

Параллельная обработка очереди сообщений

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

Описание алгоритма обработки очереди последовательных сообщений регистрации изменений записей регистра сведений. Алгоритм может быть применим к любым объектам метаданных. Алгоритм основан на обработке объектов по их ключам.

15.06.2021    4262    zhichkin    11    

22

Чем воспользоваться для распознавания котиков в 1С?

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

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    4784    comol    10    

29

Эффективные приемы разработки

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

На Infostart Meetup Ekaterinburg.Online выступил Сергей Наумов – руководитель центра аналитики и консалтинга WiseAdvice. Сергей поделился с коллегами приемами разработки, которые помогут избежать потенциальных проблем при реализации сложных проектов.

07.04.2021    5323    SergeyN    13    

39

Рекурсия для начинающих

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

Рассмотрен подход к пониманию рекурсий. Приведены примеры из реальной практики.

10.02.2021    11084    szv    5    

13

Самый быстрый FizzBuzz на 1С

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

Давайте попробуем найти самое быстрое решение задачи "BuzzFizz" на 1С.

03.02.2021    1950    Donrad    23    

11

Программное создание корректировочного счета-фактуры выданного в УПП 1.3

Математика и алгоритмы Механизмы типовых конфигураций Запросы Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет НДС Бесплатно (free)

Данный функционал можно использовать, например, в процессе оформления возвратов от поставщика (корректировка реализации по согласованию сторон) при автоматическом создании корректировок реализации по документам поставщика, он позволяет массово создать корректировочные счета-фактуры в УПП 1.3. При создании документа из первичного счета-фактуры выданного в новый корректировочный счет-фактуру выданный копируются значения свойств.

17.12.2020    1251    ksnik    0    

2

Параллельные вычисления расчета факториала числа N

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

Распараллеливание алгоритма с помощью фоновых заданий (асинхронные вычисления)

29.06.2020    5536    RustIG    18    

25

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

18.02.2020    8553    randomus    20    

75

Сравнение адресов: случай из практики

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

Как с учетом обстоятельств сравнить два небрежно записанных адреса и решить, означают ли они одно и то же. Программный код написан для режима совместимости с 8.2.

04.01.2020    5386    AnatolPopov    7    

22

[После]Новогодние задачи

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

Совсем немного времени осталось до того момента, когда отзвучат куранты, шампанское будет выпито, мандарины съедены, и даже оливье закончится. Возникнет вопрос: чем бы занять неожиданно появившееся свободное время?

30.12.2019    4060    Alxby    23    

9

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    40556    Infostart    63    

160

Иерархия без "В ИЕРАРХИИ"

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

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    19473    ildarovich    24    

181

Побитовые операции "на пальцах"

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

Простой пример для понимания того, как это работает.

02.08.2019    5367    nbeliaev    16    

8

Обработчики событий при записи объектов. Зачем и что за чем?

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

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    200103    AlbinaAAA    51    

754

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются...

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

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    6699    vandalsvq    19    

11

Что делает "В ИЕРАРХИИ" в запросе?

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

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    74632    Infostart    34    

130

Создание отчетов с помощью СКД - основные понятия и элементы

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

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    103279    ids79    33    

335

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В статье рассматриваются способы реализации таких абстрактных структур данных, как стек, очередь и приоритетная очередь, используя готовые типы данных 1С. Выявляются "узкие" места, сложные моменты в реализации и сравнивается скорость работы.

24.06.2019    19625    RonX01    70    

88

Организация хранения промежуточных данных

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

Организация хранения промежуточных данных в процедуре сверки.

29.05.2019    5101    scientes    1    

3

Вычисление 200 тысяч знаков числа pi

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

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    11218    Oleg_nsk    97    

79

Парсер таблиц по шаблону. Автоматическая корректировка парсера. Представление таблиц в виде графа.

Математика и алгоритмы Работа с интерфейсом Универсальные функции Корректировка данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Возникла такая задача: нужно нарисовать в макете шаблон таблицы, где расписано какая ячейка за что отвечает, загрузить таблицу из html и сравнить, подходит ли она под шаблон. Если да, то загрузить информацию по правилу из шаблона. Проблема в том, что в html таблица может приходить с ошибками, то есть какие то ячейки совмещены, хотя не должны. Поэтому нужно сделать так, что бы программа понимала, что таблицы похожи и где конкретно ошибки. Соответсвенно, поделил задачу на 3 этапа. 1 - это представление таблицы в виде графа, 2 - сравнение графов, 3 - забор информации. В данной статье пойдет описание пункта 1.

25.04.2019    4739    trim89    5    

24

Нечёткий поиск. Bitap алгоритм, модификация от Wu-Manber

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

Временами нужен нечёткий поиск в тексте, но не всегда можно использовать внешние компоненты. Данный алгоритм прост, достаточно быстр.

01.04.2019    5879    trim89    10    

48

Решение системы линейных уравнений

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

Пример использования объекта Расчет систем линейных уравнений.

25.03.2019    11252    scientes    12    

49

Обсуждение двух задач на пересечение отрезков

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

Ищем общее в частностях, или задача о пересечении отрезков.

15.03.2019    7718    scientes    16    

24

Многопоточное восстановление последовательностей

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

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    17302    _ASZ_    33    

53

Возврат (loop) в Алгоритмах визирования. Бит Финанс

Бюджетирование и планирование Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Финансовые услуги, инвестиции Россия Бюджетный учет Бесплатно (free)

В статье рассматривается минимальная доработка конфигурации БИТ Финанс, с сохранением поддержки, для расширения функционала Визирования: Возрат к предидущим точкам алгоритмов. Полезно будет для программистов и специалистов, занимающихся внедрением БИТ Финанс.

07.08.2018    8719    gladky    2    

10

Извлечение текстов модулей из внешней обработки 1С

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

Лень в очередной раз сподвигла меня на доработку существующего инструментария. В публикации опишу свой опыт парсинга бинарного файла с данными обычной формы (выгруженного с помощью функционала платформы 1С "Выгрузить в файлы").

28.04.2018    17588    zenechka    6    

28

Преобразование запросов

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

Использование математических методов для языка запросов.

15.03.2018    13021    vasilev2015    24    

17

"Взлом" теста "1С:Профессионал" методом машинного обучения

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

Нейронные сети – не единственная модель, реализующая принципы машинного обучения. Есть еще байесовская модель, которая математически строже и определеннее, поскольку построена на надежном фундаменте теории вероятностей. Применению байесовского вывода к решению интересной теоретической задачи и посвящена данная статья. Слово "взлом" в заголовке использовано для привлечения внимания. Речь идет исключительно о математическом методе, показанном на примере знакомой всем задачи. 

12.03.2018    23328    ildarovich    44    

95

Минимализмы 3

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

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    54144    ildarovich    47    

423