Author Topic: длина месяца обыкновенной дробью  (Read 4380 times)

0 Members and 1 Guest are viewing this topic.

Offline basta

  • Blogger
  • *
  • Posts: 2872
  • Gender: Male
Все знают, что 1 месяц = 29,530589 суток. Но иногда хочется создать систему наподобие високосных лет Иоганна Медлера, чтобы дней в месяце было целое число, пусть и разное, и чтобы период был фиксированный, и чтобы правил определения високосного месяца было мало одно, и чтобы погрешность не превышала 1 секунду в год...

Когда мне было ~15 лет я в серьёз занялся этим вопрсом. Про это всё я узнал из книжки Я познаю мир: математика, ведь сети у меня тогда не было, а вместо чтения интернетов я гамал в Warcraft 3, GTA SA и некоторые другие... Тёмными зимними ночами под одеялом я дрочил свой калькулятор на мобильнике (у простого калькулятора не было подсветки) пытаясь выпытать у него наиболее оптимальную обыкновенную дробь для 0,530588. Тогда я владел устаревшей информацией: считал что именно 8, а не 9, есть последняя цифра. Сначала перебор был брутален, но очень скоро сформировалось два-три метода, которые я уже точно не помню, но кажется среди них было что-то в духе:
Quote
Если обыкновенная дробь даёт меньше, чем искомое, то надо с числителем сделать * 2 + 1, а знаменатель удвоить

Зато я точно помню свою лучшую находку 26 / 49 = 0,5306122. Положительный момент -- это крошечный период и, думается, минимальный, а вот погрешность составляет 25 микросуток в месяц, то есть 300 микросуток в год, что весьма много; я же хотел погрешность не более 1 микросуток в месяц, в 25 раз меньшую...

Именно тогда я хорошо выучил, что в сутках 86400 секунд, и число 864 стало моим любимым. Кстати, в данной задаче гораздо удобнее оперировать микросутками, вспоминая лишь иногда, что 10 мксут = 0,864 с и что 1 с = 11,5(740) мксут. Почему удобнее? Потому что вычисление того, через сколько месяцев погрешности досуммируются до целых суток, удобно производить в обход секунд, иначе каждый раз приходится переводить туда-обратно.

Не прошло и полгода как я забросил это дело, и с тех пор к ней не возвращался. Поиск не окончен, и теперь можно не только считать самому, но и искать готовые решения в гугле. Но то мне лень, то недостаточно времени или интереса, то скилл гугления показывает свою недостаточную прокачанность. Призываю лингамфорумчан решать и искать. Я знаю, что вы этим тоже увлекаетесь.
Wer wartet mit Besonnenheit // der wird belohnt zur rechten Zeit.

Online Hellerick

  • Posts: 28342
  • Gender: Male
Сам проходил через то же самое. И я придумал отличный алгоритм поиска подходящих дробей.

Потом уже я выяснил, что не являюсь первооткрывателем этого метода. Он описан здесь, правда очень непонятно: (wiki/ru) Непрерывная_дробь

Offline basta

  • Blogger
  • *
  • Posts: 2872
  • Gender: Male
Можете вкратце объяснить понятнее? Или выложить алгоритм сюда? Какие, по Вашему, максимально приемлемые период и погрешность?
Wer wartet mit Besonnenheit // der wird belohnt zur rechten Zeit.

Online Hellerick

  • Posts: 28342
  • Gender: Male
Вот я сделал табличку на Google Docs, надеюсь, всё будет у вас работать:
https://docs.google.com/spreadsheet/ccc?key=0Ar-7Gfwe5wFhdGtLX1hBUUd0blVfY1lrR2lPUVlfM0E

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

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

Offline basta

  • Blogger
  • *
  • Posts: 2872
  • Gender: Male
причем более точной дроби с меньшим числителем и знаменателем не может быть в принципе
Круто, но всё же, хочется получить разумный период, пойдя на компромисс с точностью. Можно было бы хотеть, чтобы период укладывался в целое число лет, но это кажется уже совсем жирной прихотью... Медлеровские 128 лет — это мой идеал. ~1550 месяцев.

Ответ, подглядывая в Вашей таблице, я бы выбрал 26548 / 899 = 29 + 477 / 899. Как описать это минимумом правил? Имеем, что високосный -- каждый нечётный месяц периода, таких високосных всего 450, и остаётся всунуть 27. Период 72,686 года.

ну и т.д.
Wer wartet mit Besonnenheit // der wird belohnt zur rechten Zeit.

Online Hellerick

  • Posts: 28342
  • Gender: Male
Не гоняйтесь за точностью.

Не забывайте, что у Луны сложная орбита, период обращения гуляет на ± 1 сутки, среднее значение тоже куда-то утекает из-за того, что Луна постепенно то ли падает на Землю, то ли наоборот убегает. К тому же лунный месяц измеряется в сутках, а они из-за действия приливных сил становятся всё длиннее.

Короче говоря, вы рискуете сделать календарь точнее, чем сама луна. Оно нам надо?

Предположим, мы рассчитываем, что за две-три тысячи лет календарь должен давать ошибку порядка 1 суток (сложно представить, что календарь можно так долго использовать без единой календарной реформы, да и ошибку в 1 сутки заметить будет трудно). Возьмем период в 40000 месяцев, в идеале это примерно 1181223,56. Посчитаем с ошибкой по максимуму и минимуму:

(1181223,56+1)/40000=29,530614
(1181223,56-1)/40000=29,530564

Вот примерно в этот интервал и нужно уложиться. Бо́льшая точность бессмысленна. По истечению этих 40000 месяцев всё равно будет уже другое значение среднего лунного месяца, и ваше точнейше подобранное календарное значение попросту устареет.

Кстати, я как-то использовал ваше соотношение 26/49 = 0,5306122. Вот здесь: http://calendars.wikia.com/wiki/Tetraeteric_Calendar
Я объявил основной единицей «лунную четырехлетку», приравненную к 49 месяцам и всегда равную 1447 дням. Не точно, но всё же лучше традиционных лунных календарей. Одно время я даже в школьных тетрадях проставлял дату по этой системе.

Offline arseniiv

  • Posts: 14931
    • ::
то ли наоборот убегает
Да, вот это.

Offline basta

  • Blogger
  • *
  • Posts: 2872
  • Gender: Male
Hellerick、なるほどう!

Теперь конкурс на самое короткое и простое объяснение 26 / 49.

например, високосным является каждый второй, но 23-й високосный настолько толст, что занимает четыре сидения.

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1
Wer wartet mit Besonnenheit // der wird belohnt zur rechten Zeit.

Offline arseniiv

  • Posts: 14931
    • ::
Неравномерно как-то!

Offline basta

  • Blogger
  • *
  • Posts: 2872
  • Gender: Male
Quote
Неравномерно как-то!

Моё объяснение (пока) самое простое, а равномерность большой роли не играет, так как при такой моей схеме, за период не набирается и часа погрешности во всех его точках. Учтите, что при любом достаточно равномерном распределении, групп високосных месяцев будет 23, а это число как надо ни на чё не делится:

1)
0 1 0 1 0 1 0 1 0 1 0 1 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1


«Високосные чередуются с невисокосными, правда каждый 7-й високосный является двойным (длится 2 месяца), и всего високосных в периоде -- 23 штуки»

А как без упоминания длины периода?

2)
0 1 0 1 0 1 0 1 0 1 0 1 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1


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

3)
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1


«В лунном году все нечётные месяцы являются високосными. Обычно лунный год длится 17 месяцев, но каждый третий -- 15»
-- тут не весь период, а его треть.

Довольно непростые объяснения.
Wer wartet mit Besonnenheit // der wird belohnt zur rechten Zeit.

Offline mnashe

  • Administrator
  • *
  • Posts: 44840
  • Gender: Male
Сам проходил через то же самое. И я придумал отличный алгоритм поиска подходящих дробей.
А я пользуюсь готовым, попавшимся где-то ещё в детстве или студенчестве:
Code: [Select]
  repeat
    if mult=0 then break; end;
    c:=int(mult:=1/mult); mult:=frac(mult);
    _int:=a1; a1:=a; a*=c; a+=_int;
    _int:=b1; b1:=b; b*=c; b+=_int;
  until abs(a/b−num) < precision;
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Offline RawonaM

  • Posts: 43313
Hellerick、なるほどう!
>>>
Rick Bright, なるほど う!


Chiorte.

ラヲナムの馬鹿 ー прим. basta

Offline mnashe

  • Administrator
  • *
  • Posts: 44840
  • Gender: Male
Все знают, что 1 месяц = 29,530589 суток.
свою лучшую находку 26 / 49 = 0,5306122
Quote from: еврейский календарь
29.5305941

Неплохое приближение. Погрешность всего в 4,5 раза больше, чем у еврейского календаря.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

 
точность
0.53058913753
25920
10⁻³26/4926/49
10⁻⁴26/4926/49
10⁻⁵451/850581/1095
10⁻⁶451/850581/1095
10⁻⁷928/17491795/3383
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Online Hellerick

  • Posts: 28342
  • Gender: Male
например, високосным является каждый второй, но 23-й високосный настолько толст, что занимает четыре сидения.

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1

Для получения равномерного распределения я придумал метод последовательных остатков. По нему «високосность» года или месяца определяется значением остатка деления от остатка деления от остатка деления [...] номера этого года или месяца.

Вернемся к моей табличке, запишем в зеленую ячейку значение 0,530589. И выпишем из столбца значения знаменателей (проигнорировав первую единицу и минусы): 2; 17; 49; 899; 1749... Эти числа и становятся в основу равномерного распределения. Каждой дроби таким образом соответствует свое правило определения високосности месяца.

Дробь:Правило:
1/2=0.5MONTH mod 2 = 0
9/17=0.529412MONTH mod 17 mod 2 = 0
26/49=0.530612MONTH mod 49 mod 17 mod 2 = 0
477/899=0.530590MONTH mod 899 mod 49 mod 17 mod 2 = 0
928/1749=0.530589MONTH mod 1749 mod 899 mod 49 mod 17 mod 2 = 0

Напомню, «mod» — это оператор нахождения остатка от деления.

Так, для системы 26/49 високосность месяца определятся тем будет ли равен нулю остатоток от деления на 2 остатка от деления на 17 остатка от деления на 49 абсолютного номера месяца. Именно такое распределения високосных месяцев будет наиболее равномерным.

Равномерное респределение високосов для для лунного календаря является более важным, чем точное значение средней продолжительности месяца. Ведь три 30-дневных месяца подряд или, не дай бог, один 31-дневный дадут отклонение от календаря от лунного цикла на одни сутки — и происходить это будет не через тысячи лет, когда календарь накопит ошибку, а сразу с момента введения календаря.

Offline basta

  • Blogger
  • *
  • Posts: 2872
  • Gender: Male
Так, для системы 26/49 високосность месяца определятся тем будет ли равен нулю остатоток от деления на 2 остатка от деления на 17 остатка от деления на 49 абсолютного номера месяца. Именно такое распределения високосных месяцев будет наиболее равномерным.
Очень здорово, но какой из месяцев будет нулевым? 1-29 января 1 года от р.х.? Можно, кстати, отказаться от абсолютных и считать с 1 после 49, формула не сильно поменяется.

3)
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

«В лунном году все нечётные месяцы являются високосными. Обычно лунный год длится 17 месяцев, но каждый третий -- 15»
Вот этот вариант тоже неплох, только на месте выражения лунный год надо написать что-то другое, а то превратно поймут.
Wer wartet mit Besonnenheit // der wird belohnt zur rechten Zeit.

Online Hellerick

  • Posts: 28342
  • Gender: Male
Вот этот вариант тоже неплох, только на месте выражения лунный год надо написать что-то другое, а то превратно поймут.

Всё уже украдено до нас
Карл Палмен называет этот период yerm. См. тут: http://www.hermetic.ch/cal_stud/palmen/yerm1.htm

Offline basta

  • Blogger
  • *
  • Posts: 2872
  • Gender: Male
Wer wartet mit Besonnenheit // der wird belohnt zur rechten Zeit.

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Note: this post will not display until it's been approved by a moderator.
Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
√49 Напишите ответ строчными буквами:
«Сто одёжек, все без застёжек» — что это?: