暦計算研究会編「新こよみ便利帳」の正誤について 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 AddinBox(Tsunoda) 2002年3月10日 15:47 こんにちは。 水路部・暦計算研究会で編集され、恒星社厚生閣から出版されている 【新こよみ便利帳】に記載されている内容の正誤についてお聞きしたい のですが、よろしくお願いします。 『12頁の春分/秋分日の計算式(1900〜1979年通用)』で得られる結果と、 『14頁以降の24節気表(1950〜1979年)』に記載されている春分/秋分日 の【日】が一致しないのですが、どちらが正しいのでしょうか? 計算式の方の〔(年−1983)÷4〕という部分を、〔(年−1980)÷4〕に 変えてみると24節気表と一致(1950〜1979年)する結果になりましたが、 どうなのでしょうか? 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 暦算担当 2002年3月11日 11:54 角田 様 海上保安庁水路部航法測地課暦算担当です。 お問い合わせのありました件について回答いたします。 ご指摘がありました新こよみ便利帳のP12に記載の 春分・秋分(1900〜1979年)の式について当方で、 1950,1965,1979年についてそれぞれ計算して みましたが、P14,P15に記載の24節気の日付と同じ となりました。 参考までに計算例を下記に示させていただきますので ご確認お願いいたします。 春分の式(1900−1979年適用)  [20.8357+0.242194 (年−1980)−[年−1983]] 1950年  [20.8357− 7.26582 +           8   ]  =[21.56988]=21 1965年  [20.8357− 3.63291 +           4   ]  =[21.20279]=21 1979年  [20.8357− 0.242194 +          1   ]  =[21.593506]=21 秋分の式(1900−1979年適用)  [20.3.2588+0.242194 (年−1980)−[年−1983]] 1950年  [23.2588− 7.26582 +           8   ]  =[23.99298]=23 1965年  [23.2588− 3.63291 +           4   ]  =[23.62589]=23 1979年  [23.2588− 0.242194+           1   ]  =[24.016606]=24 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 AddinBox(Tsunoda) 2002年3月11日 16:53 こんにちは。 早速のお返事ありがとうございます。 > ご指摘がありました新こよみ便利帳のP12に記載の春分・秋分 >(1900〜1979年)の式について当方で、1950,1965,1979年 >についてそれぞれ計算してみましたが、P14,P15に記載の24節気 >の日付と同じとなりました。 再度、確認しましたところ、ガウス記号に相当する演算を行なう関数の 選択が不適切だった為に、正しい結果が得られなかった事が判りました。 ExcelのVBA(VBでも同じ)でマクロを作成しているのですが、実数から 整数部分のみを求める2つの関数『Int関数・Fix関数』のうち、Int関数を 使っていました。 今までは[1980〜2099年][2100〜2150年]の2つを用いていましたが、この 期間でこの式を利用する限りは〔(年−1980)/4〕の部分は必ず【正】で ある為、Int関数でも何ら問題ありませんでした。 If (年 <= 2099) Then 春分日 = Int(20.8431 + (0.242194 * (年 - 1980)) - Int((年 - 1980) / 4)) ElseIf (年 <= 2150) Then 春分日 = Int(21.851 + (0.242194 * (年 - 1980)) - Int((年 - 1980) / 4)) 今回、期間を広げようと[1900〜1979年]の式を組み込んだ際も、そのまま Int関数を使いましたが、この期間の場合は〔(年−1983)/4〕の部分が 【負】になります。   春分日 = Int(20.8357 + (0.242194 * (年 - 1980)) - Int((年 - 1983) / 4)) そして、【負】の実数の場合、Int関数とFix関数で得られる結果には違いが 表れます(下記参照)。  これにより〔(年−1983)/4〕の部分で、本来の値より『1小さい』結果が 出て来てしまった為に、求めた日付が一致しなかった訳です。  Fix関数に修正して確認したところ、全て24節気表の内容と一致する結果 になりました。 ---- ヘルプより引用 -------------------------------   Int 関数と Fix 関数は、どちらも引数 number の小数部分を 取り除いた整数値を返します。   引数 number に負の値を指定した場合には、Int 関数が引数  number を超えない最大の負の整数を返すのに対して、Fix  関数は引数 number 以上の最小の負の整数を返します。  たとえば、引数として -8.4 を指定すると、Int 関数は -9、  Fix 関数は -8 をそれぞれ返します。 --------------------------------------------------- まったく私の方のミスであり、お手数を煩わせました事をお詫びいたします。 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 AddinBox(Tsunoda) 2002年3月26日 7:10 再び失礼致します。 先日、ご返事頂いた内容について、再度確認させてください。 > 春分の式(1900−1979年適用) >  [20.8357+0.242194 (年−1980)−[年−1983]] > > 1950年 >  [20.8357− 7.26582 +           8   ] >  =[21.56988]=21 [(年(=1950)−1983)/4]⇒−8 という計算との事ですが、ガウス記号の 定義を改めて調べ直してみましたところ、『その値を越えない最大の整数値』 のようです。つまり、[−8.25]⇒−9になるはずです。VB関数なら、やはり Fix関数ではなくInt関数の方になると思います。 ただ、新こよみ便利帳に記載されている注釈が   上記で[n]はガウス記号で、nの小数部を切り捨てた整数部を   意味する。INT[n]と書く場合がある。 となっていますので、正負を問わず真ん中の「nの小数部を切り捨てた整数部」 という意味で解釈しなさいという説明ならば納得できます。 このあたり、この式における再説明という意味で「正誤表」が必要なのでは ないでしょうか。ガウス記号の意味を知っている人や、INT[n]から即INT関 数 に結び付けてしまう人にとっては、混乱の元になると思います。 なお、私自身現在は「nの小数部を切り捨てた整数部」という解釈でFix関数 を使うようにしており、24節気一覧と同じ結果が得られています。 ---- ヘルプより引用 -------------------------------   Int 関数と Fix 関数は、どちらも引数 number の小数部分を 取り除いた整数値を返します。   引数 number に負の値を指定した場合には、Int 関数が引数  number を超えない最大の負の整数を返すのに対して、Fix  関数は引数 number 以上の最小の負の整数を返します。  たとえば、引数として -8.4 を指定すると、Int 関数は -9、  Fix 関数は -8 をそれぞれ返します。 --------------------------------------------------- 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 AddinBox(Tsunoda) 2002年3月26日 8:32 追加ですが、1851〜1979年の『 [(年 - 1983)÷4] 』の部分を   Fix((年 - 1983) / 4) で計算(即ち、整数部そのもので)した結果と   Int((年 - 1980) / 4) で計算(即ち、ガウス記号の本来の解釈)した結果は春分日/秋分日とも 一致しました。ということは、1979年以前の式で『1980⇒1983』に 変わるのは、『負数でも小数部を切り捨てた整数部』という解釈での計算 で求める為の補正なのでしょうか? 元々、ガウス記号本来の解釈で行なっていれば、全て『 [(年 - 1980)÷4] 』 で統一されていたという事でしょうか? ---- ヘルプより引用 -------------------------------   Int 関数と Fix 関数は、どちらも引数 number の小数部分を 取り除いた整数値を返します。   引数 number に負の値を指定した場合には、Int 関数が引数  number を超えない最大の負の整数を返すのに対して、Fix  関数は引数 number 以上の最小の負の整数を返します。  たとえば、引数として -8.4 を指定すると、Int 関数は -9、  Fix 関数は -8 をそれぞれ返します。 --------------------------------------------------- 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 REKISAN 2002年3月28日 10:11 片山@海上保安庁水路部航法測地課暦算担当と申します。 遅くなりましたが、下記の質問についてお応えします。 ガウス記号につきましては、確かにご指摘どおり『その値を越えない最大の整数値』 ですので、「上記で[n]はガウス記号で、nの小数部を切り捨てた整数部を 意味する。」というくだりは誤りのように思います。 「nの小数部を切り捨てた整数部」というのが趣旨です。 しかしながら、後段の「INT[n]と書く場合がある。」につきましては 本書でそう書いているところがあるという意味になります。 また、INT関数の挙動につきましてはBASIC系の言語は確かにそのような動作を いたしますが、FortranやCなどでは小数部を切り捨てた整数部という動作をします。 それから、下記の「ガウス記号本来の解釈で行なっていれば」の件につきましては ご指摘のとおりです。プログラム作成の際にはその様にしていただいて構いません。 以上になりますが、よろしいでしょうか? 今後ともよろしくお願いいたします。 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 AddinBox(Tsunoda) 2002年3月28日 12:18 こんにちは。 >片山@海上保安庁水路部航法測地課暦算担当と申します。 >遅くなりましたが、下記の質問についてお応えします。 ありがとうございました。おかげさまで、疑問点もスッキリしました。 今後も「新こよみ便利帳」を活用させてもらいます。 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜