Все справочники лежат отдельными наборами данных, у каждого назван эталон и записано, чем он сверен. Никакой калькулятор не хранит свою копию: набор один, его берут все, и разойтись между собой они не могут.
| Набор | Что в нём | Эталон | Объём |
|---|---|---|---|
| Солнечные термины | моменты всех 24 сезонов, включая Начало весны | астрономический счёт 寿星天文历 (VSOP87 с поправкой ΔT) | 48 024 строки, 1000 — 3000 годы |
| Правила часовых поясов | переходы, смещения и признак летнего времени | база часовых поясов IANA, выпуск 2026b | 598 зон, 41 184 перехода |
| Границы часовых поясов | какой зоне принадлежит точка на карте | timezone-boundary-builder | 419 зон, 1184 контура |
| Частота сочетаний Цзы Вэй | насколько редко встречается сочетание звёзд | сплошной перебор карт рождения | 1 253 520 карт, 1900 — 2042 |
| Содержимое дворцов Цзы Вэй | что и как часто стоит в каждом дворце | тот же перебор | 1900 — 2042 |
Последние два набора человек на сайте не видит: они нужны редактору толкований, чтобы знать, какое сочетание редкое, а какое встречается в каждой третьей карте. Толкование, написанное к тому, чего не бывает, — потраченный день.
Чем сверены термины
Термин — это прохождение Солнца через отметку, кратную 15° долготы; такую вещь можно проверить независимо, без всяких таблиц. Наш набор сверен с официальной публикацией Гонконгской обсерватории за 2019 — 2028 годы: 240 строк из 240 совпали по дате, время — в пределах минуты.
Проверка была не формальной. До неё моменты терминов брались из снимка базы старого сайта, и в этом снимке нашлись 50 строк с неверным моментом — у части из них время указано верно, а число сдвинуто на сутки, семь и даже восемь суток. Термин у полуночи попадал в другие сутки, и вместе с ним уезжал столп месяца. Сейчас на этих датах наш календарь расходится со старым сайтом — и расходится в свою пользу.
Тем же способом чинилась лунная таблица: пять строк снимка оказались с опечатками, две в дате начала месяца и три в номере месяца. Первые роняли расчёт на двенадцати датах, вторые не роняли ничего — просто у всех, кто родился в эти месяцы, дворец жизни стоял не там. Нашлись они сплошным перебором миллиона карт; руками такое не наберёшь.
Номер версии
У каждого расчёта два номера: версия самого расчёта и версия справочников, на которых он посчитан. Первый растёт при любой правке ядра, второй — когда обновляется набор данных.
Номера едут вместе с каждым ответом. На экране их не показывают — они не нужны, пока всё в порядке, — но по ним сбрасываются кэши, и по ним же разработчик, подключивший наш API, видит, что расчёт изменился.
Правки движков описаны там же, где стоит номер: не «улучшения и исправления», а что именно изменилось и на каких датах результат стал другим. Пример записи: после перехода на астрономический эталон подписи «сезон сменился в…» стали точнее на секунды-полторы минуты, а на 50 датах изменился столп месяца.
Воспроизводимость
Одни и те же входные данные дают один и тот же ответ — всегда. Никакой случайности, никакого «сегодня посчиталось иначе»: если карта изменилась, значит изменились либо ваши данные, либо версия расчёта, и второе видно по номеру.
Отсюда же правило про недостающие данные: пока справочник не загрузился, расчёт отвечает «пока не могу», а не приблизительным числом. Приблизительных ответов здесь не бывает.
Докуда хватает справочников
| Инструмент | Годы | Чем ограничено |
|---|---|---|
| Ба Цзы | по умолчанию 1901 — 2079 | настраиваемый срез таблицы терминов |
| Китайский календарь | 1900 — 2043 | лунные таблицы: столпы года до 2042, лунные сутки до 2061 |
| Цзы Вэй Доу Шу | 1900 — 2043 | то же |
| Число Гуа | 1901 — 2099 | границы формы |
За границей своего диапазона калькулятор не считает и не гадает: форма просто не пустит такую дату. Это честнее, чем ответ, за которым ничего не стоит.
Где ещё эти границы дают о себе знать — на странице «Почему результат отличается от других программ».