LoginSignup
1
0

儀鳳暦のマジックナンバー1340の謎を解く(4)共通分母って本当に使い易い?

Last updated at Posted at 2024-05-12

はじめに

儀鳳暦(中国では麟徳暦)は一太陽年および一朔望月を定義する分数において,初めて共通分母を採用したとされる。

  • 一太陽年=489428/1340=365.2448日
  • 一朔望月=39571/1340=29.53060日

この共通分母1340の由来についてはまず下記の記事を参照されたい。

表1に隋唐時代の暦法を示すが,麟徳暦よりも前の暦法では分母がバラバラであるのに対し,麟徳暦以降の暦法はすべて共通分母制を踏襲していることが分かる。このことから筆者は共通分母には計算が楽になるなどの利便性があるのではないかと推察したが,果たして本当だろうか?本記事はその検証を行う。

表1 隋唐時代の暦法一覧
暦名 選者 実施期間 一太陽年 一朔望月 上元積年
開皇 張賓 594~596
(13年間)
$\displaystyle\frac{25063}{102960}$ $\displaystyle\frac{5372209}{181920}$ 上元甲子至開皇四年甲辰
4129000年
皇極 劉焯 未実施 $\displaystyle\frac{17036466.5}{46644}$ $\displaystyle\frac{36677}{1242}$ 上元甲子至仁寿四年甲子
1008840年
大業 張冑玄 597~618
(22年間)
$\displaystyle\frac{15573963}{42640}$ $\displaystyle\frac{33783}{1144}$ 上元甲子至大業四年戊辰
1427644年
戊寅 傅仁均 619~664
(46年間)
$\displaystyle\frac{3456675}{9464}$ $\displaystyle\frac{384075}{13006}$ 上元戊寅至武徳九年丙戌
164348年
麟徳 李淳風 665~728
(64年間)
$\color{red}{\displaystyle\frac{489428}{1340}}$ $\color{red}{\displaystyle\frac{39571}{1340}}$ 上元甲子至麟徳元年甲子
269880年
大衍 僧一行 729~761
(33年間)
$\displaystyle\frac{1110343}{3040}$ $\displaystyle\frac{89773}{3040}$ 上元甲子至開元十二年甲子
96961740年
五紀 郭獻之 762~783
(22年間)
$\displaystyle\frac{489428}{1340}$ $\displaystyle\frac{39571}{1340}$ 上元甲子至宝応元年壬寅
269978年
正元 徐承嗣
楊景風
784~806
(23年間)
$\displaystyle\frac{399943}{1095}$ $\displaystyle\frac{32336}{1095}$ 上元甲子至興元元年甲子
402900年
観象 徐昻 807~821
(15年間)
不明 不明 不明
宣明 徐昻 822~892
(71年間)
$\displaystyle\frac{3068055}{8400}$ $\displaystyle\frac{248057}{8400}$ 上元甲子至長慶二年壬寅
7070138年
崇玄 辺岡 893~938
(46年間)
$\displaystyle\frac{4930801}{13500}$ $\displaystyle\frac{398663}{13500}$ 上元甲子至景福元年壬子
53947308年

試しに簡単な暦計算を行ってみる

参考文献[1]に従い,日本書紀の記述にある持統11年(AD697年)8月1日「八月乙丑朔」を計算してみる。儀鳳暦の基準年は麟徳1年(AD664年)の前年の11月1日(朔)甲子日から数えて上元(積年)269880年前の11月1日(朔)甲子日であり,午前0時が「冬至」になる。目的の前年の持統10年(AD696年)11月朔(1日)の積年を

\textsf{積年} = 269880 + (697 - 664) = 269913\,\textsf{年} \tag{0}

として持統10年(AD696年)11月朔の干支を求める。

\frac{269913}{80400} = 3 + \frac{28713}{80400} \tag{1}
\frac{28713 \times \color{red}{7028}}{80400} = 2509 + \frac{71364}{80400} \tag{2}
\frac{71364}{1,340} = 53 + \frac{344}{1340} \tag{3}
\frac{269913}{39571} = 6 + \frac{32487}{39571} \tag{4}
\frac{32487 \times \color{red}{14576}}{39571} = 11966 + \frac{23926}{39571} \tag{5}
\frac{23926}{1340} = 17 + \frac{1146}{1340} \tag{6}

となるので,AD696年11月朔は各々余りと商を引く,すなわち$(3) - (6)$ より

\begin{aligned}
\textsf{小余} &= 344 - 1146 + 1340 = 538 \\
\textsf{大余} &= 53 - 17 - 1 = 35\textsf{(己亥)}
\end{aligned} \tag{7}

となる。AD696年12月朔は前月11月朔に一朔望月の余りと商を加える。

\begin{aligned}
\textsf{小余} &= 538 + 711 = 1249 \\
\textsf{大余} &= 35 + 29 + 0 - 60 = 4\textsf{(戊辰)}
\end{aligned} \tag{8}

これをくり返した翌AD670年8月朔干支は,

\begin{aligned}
\textsf{小余} &=  1249 + (711 \times 8) - 1340 \times 5 = 237 \\
\textsf{大余} &= 4 + (29 \times 8) + 5 - 60 \times 4 = 1\textsf{(乙丑)}
\end{aligned} \tag{9}

となり,持統11年(AD697年)8月1日の干支も「乙丑」になって日本書紀の記述と一致するとのこと。

  
表2 六十干支表
干支 干支 干支 干支 干支 干支
00 甲子 10 甲戌 20 甲申 30 甲午 40 甲辰 50 甲寅
01 乙丑 11 乙亥 21 乙酉 31 乙未 41 乙巳 51 乙卯
02 丙寅 12 丙子 22 丙戌 32 丙申 42 丙午 52 丙辰
03 丁卯 13 丁丑 23 丁亥 33 丁酉 43 丁未 53 丁巳
04 戊辰 14 戊寅 24 戊子 34 戊戌 44 戊申 54 戊午
05 己巳 15 己卯 25 己丑 35 己亥 45 己酉 55 己未
06 庚午 16 庚辰 26 庚寅 36 庚子 46 庚戌 56 庚申
07 辛未 17 辛巳 27 辛卯 37 辛丑 47 辛亥 57 辛酉
08 壬申 18 壬午 28 壬辰 38 壬寅 48 壬子 58 壬戌
09 癸酉 19 癸未 29 癸巳 39 癸卯 49 癸丑 59 癸亥

積年の定義が今一つ不明瞭だ。儀鳳暦の基準年は麟徳1年(AD664年)の前年,すなわちAD663年の11月1日(朔)とし,目的の前年の持統10年(AD696年)11月朔の積年を求めるのであれば式 $(0)$ は

\textsf{積年} = 269880 + (696 - 663) = 269913\textsf{年} \tag{$0'$}

となりそうな気がするのだが,あくまで参考文献[1]の式に従っている。

自分なりの儀鳳暦の解釈

先ほどの計算を初見で理解できる人がいたら天才だと思う。

事前準備として剰余演算について整理する。剰余演算子を $\bmod$ とすると $a \times b$ を $p$ で割った余りは $a$ と $b$ をぞれぞれ $p$ で割った余り同士の積の余りに等しい。

(a \times b) \bmod p = \{(a \bmod p) \times (b \bmod p)\} \bmod p  \tag{10}

わざわざ計算の手間を増やしただけに見えるが,手計算で行う場合は大きな意味がある。$p$ で割った余りは必ず $p$ より小さい数になるので小さい数同士の計算になるからだ。

先ほどの計算をトレースしてみよう。まず式 $(1),(2)$ について,マジックナンバー $80400$ の意味は分かり易い。$60\textsf{日} \times 1340\textsf{分/日} = 80400\textsf{分}$ という意味だ。

\begin{aligned}
&\{(269913\textsf{年} \bmod 80400\textsf{分}) \times \color{red}{7028\textsf{分/年}}\} \bmod 80400\textsf{分} \\
&= \{(269913\textsf{年} \bmod 80400\textsf{分}) \times (489428\textsf{分/年} \bmod 80400\textsf{分})\} \bmod 80400\textsf{分} \\
&= \color{blue}{(269913\textsf{年} \times 489428\textsf{分/年}) \bmod 80400\textsf{分}} \\
&= 132102979764\textsf{分} \bmod 80400\textsf{分} \\
&= \color{red}{71364\textsf{分}}
\end{aligned}

※青色の式を得るところで式 $(10)$ を使っている。

先ほど現れたマジックナンバー7028の出所が分かる。一年489428分を六十干支80400分で割った余りだ。すなわち,一年365.2448日を60日で割った余り5.2448日に相当する。こうして得られた71364分は積年269913年11月1日午前0時を六十干支位置で(一日当たり1340分の単位で)表したものだ。

次に式$(4),(5)$ についても示す。

\begin{aligned}
&\{(269913\textsf{年} \bmod 39571\textsf{分/月}) \times \color{red}{14576\textsf{分/年}}\} \bmod 39571\textsf{分/月} \\
&= \{(269913\textsf{年} \bmod 39571\textsf{分/月}) \times (489428\textsf{分/年} \bmod 39571\textsf{分/月}\} \bmod 39571\textsf{分/月} \\
&= \color{blue}{(269913\textsf{年} \times 489428\textsf{分/年}) \bmod 39571\textsf{分/月}} \\
&= 132102979764\textsf{分} \bmod 39571\textsf{分/月} \\
&= \color{red}{23926\textsf{分}}
\end{aligned}

※青色の式を得るところで式 $(10)$ を使っている。

同様にマジックナンバー14576の出所が分かった。一年489428分を一朔望月39571分で割った余りだ。すなわち一年365.2428日を一朔望月29.5036日で割った余り10.8776日に相当する。こうして得られた23926分は積年269913年11月1日午前0時を一朔望月位置で(一日当たり1340分の単位で)表したものだ。さらに,11月1日朔の一朔望月における位置を0にするため71364分から23926分を差し引く。この結果,持統11年11月1日午前0時を六十干支位置で(一日当たり1340分の単位で)表すと

71364-23926 = 47438\textsf{分} \tag{11}

となる。これより

\frac{47438\textsf{分}}{1340\textsf{分/日}} = 35\textsf{日} + \frac{538\textsf{分}}{1340\textsf{分/日}} \tag{12}

となる。表2より35日は「己亥」となる。

持統11年11月1日午前0時の六十干支位置47438分に対して,毎月39571分ずつ加えたものが①通算分である。①通算分を80400分で割った余りが②六十干支位置(単位は分)になる。②六十干支位置を1340分で割った商が六十干支の日数(表の赤色部分)となる。

表3 持統12年8月1日の計算例
年月日 ①通算分 ②六十干支位置 干支
持統10年11月1日 $47438$ $47438/1340 = \color{red}{35} + \:\;538/1340$ 己亥
持統10年12月1日 $87009$ $\:\;6609/1340 = \:\;\color{red}{4} + 1249/1340$ 戊辰
持統11年01月1日 $126580$ $46180/1340 = \color{red}{34} + \:\;620/1340$ 戊戌
持統11年02月1日 $166151$ $\:\;5351/1340 = \:\;\color{red}{3} + 1331/1340$ 丁卯
持統11年03月1日 $205722$ $44922/1340 = \color{red}{33} + \:\;702/1340$ 丁酉
持統11年04月1日 $245293$ $\:\;4093/1340 = \:\;\color{red}{3} + \:\;\:\;73/1340$ 丁卯
持統11年05月1日 $284864$ $43664/1340 = \color{red}{32} + \:\;784/1340$ 丙申
持統11年06月1日 $324435$ $\:\;2835/1340 = \:\;\color{red}{2} + \:\;155/1340$ 丙寅
持統11年07月1日 $364006$ $42406/1340 = \color{red}{31} + \:\;866/1340$ 乙未
持統11年08月1日 $403577$ $\:\;1577/1340 = \:\;\color{red}{1} + \:\;237/1340$ 乙丑

比較のため元嘉暦で計算してみよう

元嘉暦は共通分母ではない。また一太陽年/一朔望月がサロス周期(235/19)を採用した章法である。

  • 一太陽年=111035/304
  • 一朔望月=22207/752
  • 一太陽年/一朔望月=235/19

こちらも参考文献[1]に従い,日本書紀の記述にある持統11年(AD697年)8月1日「八月乙丑朔」を計算してみる。元嘉20年(AD443年)より積年5703年前が基準になり,持統11年(AD697年)までの積年は

\textsf{積年} = 5703 + (697 - 443) = 5957 \tag{20}

持統11年(AD697年)正月朔(一日)は

5957\textsf{年} \times \frac{235\textsf{月}}{19\textsf{年}} = 73678\textsf{月} + \frac{13}{19} \tag{21}
73678\textsf{月} \times \frac{22207\textsf{日}}{752\textsf{月}} = 2175754\textsf{日} + \frac{338}{752} \tag{22}
\frac{2175754\textsf{日}}{60\textsf{日}} = 36262 + \frac{\color{red}{34\textsf{日}}}{60\textsf{日}} \tag{23}

となるので正月朔(一日)の六十干支は34(戊戌)となる。

二月朔の六十干支日数を計算してみると

\begin{aligned}
34\textsf{日} + \frac{338}{752} + \frac{22207}{752} &= 34\textsf{日} + \frac{338}{752} + 29\textsf{日} + \frac{399}{752} \\
&= 63\textsf{日} + \frac{677}{752} \\
&= 60\textsf{日} + \color{red}{3\textsf{日}} + \frac{677}{752}
\end{aligned} \tag{24}

となり,3日(丁卯)を得られる。同様にして八月朔は

\begin{aligned}
34\textsf{日} + \frac{338}{752} + 7 \times \frac{22207}{752} &= 34\textsf{日} + \frac{338}{752} + 7 \left(29\textsf{日} + \frac{399}{752}\right) \\
&= 237\textsf{日} + \frac{3131}{752} \\
&= 241\textsf{日} + \frac{123}{752} \\
&= 4 \times 60\textsf{日} + \color{red}{1\textsf{日}} + \frac{123}{752} 
\end{aligned} \tag{25}

となり,1日(乙丑)が得られた。

儀鳳暦に比べると元嘉暦の計算手順は遥かに分かり易いように思える。

自分なりの儀鳳暦の解釈その2

元嘉暦の計算手順に準じて,ただし定数は儀鳳暦のものを用いて計算してみよう。

\textsf{積年} = 269880 + (697 - 664) = 269913\textsf{年} \tag{30}
269913\textsf{年} \times \frac{489428\textsf{月}}{39571\textsf{年}} = 3338378\textsf{月} + \frac{23926}{39571} \tag{31}
3338378\textsf{月} \times \frac{39571\textsf{日}}{1340\textsf{月}} = 98584295\textsf{日} + \color{red}{\frac{538}{1340}} \tag{32}
\frac{98584295\textsf{日}}{60\textsf{日}} = 1643071 + \frac{\color{red}{35\textsf{日}}}{60\textsf{日}} \tag{33}

ということで計算の手順は前後しているが,式 $(12)$ と同じ結果を得られていることが分かる。すなわち,この計算手順でも正しく六十干支を計算できる。

式 $(31)$ は積年11月を上元からの通算月数に変換しているという意味である。式 $(31)$ の端数部分は閏月を決めるための情報を保持しているに過ぎないため,同一年内であれば端数部分を切り捨てて構わない。以下,通算月数の計算例を示すが,前年との通算月数の差分が13の年は閏月を設けることになる。

一方,式 $(32)$ は積年11月1日を上元からの通算日数に変換しているという意味である。こちらの端数には意味があり,大の月(30日)と小の月(29日)を決めるための情報を保持している。

表4 通算月数
積年 通算月数 差分
269913 3338378
269914 3338390 12
269915 3338403 13
269916 3338415 12
269917 3338428 13
269918 3338440 12
269919 3338452 12
269920 3338465 13
269921 3338477 12
269922 3338489 12
表5 通算日数
通算月数 通算日数 差分
3338378 98584295
3338379 98584324 29
3338380 98584354 30
3338381 98584383 29
3338382 98584413 30
3338383 98584443 30
3338384 98584472 29
3338385 98584502 30
3338386 98584531 29
3338387 98584561 30

まとめ

今回,六十干支の計算を通じて,共通分母を採用した儀鳳暦(麟徳暦)と共通分母ではない元嘉暦の双方を比較したが共通分母自体のメリットを見い出せなかった。

むしろ後年になるに従い,暦法で用いる定数は概ね桁数が増えていく傾向があり,手計算で行うのは大変煩雑であったことが推察される。

式 $(1) \sim (7)$ と式 $(31) \sim (33)$ は等価であるが,後者のほうが計算ステップ数も短く計算意図を理解しやすいはずだ。にも関わらず前者のほうが採用されたのは手計算で楽だったからと思われる。前者では最大五桁同士の乗算で済むが,後者では六桁同士あるいは七桁と五桁の乗算を行う必要があるからだ。

ただし,実際に六十干支計算を行ってみると六十干支自体は一日の単位であるにも関わらず儀鳳暦と元嘉暦のいずれの計算過程においても一日よりも短い時間単位で情報を保持する必要があった。儀鳳暦では1340,元嘉暦では752が該当する。この結果,計算過程で現れた分母が物理的な時間単位として認識されていき,やがて共通分母に繋がっていったのではないかと考える。

参考文献

[0] 内田正男,日本暦日原典第三版,雄山閣出版,1978年
[1] 神谷政行,天武天皇の年齢研究-元嘉暦と儀鳳暦 - biglobe

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0