«前の日記(2004年10月27日) 最新 次の日記(2004年10月29日)» 編集

Matzにっき


2004年10月28日 [長年日記]

_ [家族]出産と満月

早朝4時に「破水したかも」と起こされる。 さっそく妻を病院につれていく。

玄関を出たら、ちょうど正面に満月が輝いていた。

妻を病院に送っていって、pomで調べると

matz@x31[~] pom 2004102804
Thu 2004 Oct 28 04:00:00 (JST):  The Moon was Full

だそうだ。そういえば、「出産は満月に多い」と聞いたことがある。

うちの子で調べてみると、長女は新月(5% full)だったが、次女はほぼ満月(98% full)、 長男はちょっと足りない(67% full)だった。サンプル数が少なすぎるが、 なんとなく満月に近い傾向はあるような気がする。

pomはThe Epoch(1970-01-01 00:00 UTC)以前は計算できないようで、 自分の産まれた時は計算できなかった。年寄り。

後でアルゴリズムを調べてRubyで計算してみよう。

追記

pomのソースをベースにハックしてみた。

# Copyright (c) 1989, 1993
#      The Regents of the University of California.  All rights reserved.
require 'time'

EPOCH_MINUS_1970=(20 * 365 + 5 - 1)	# 20 years, 5 leaps, back 1 day to Jan 0
EPSILONg=279.403303			# solar ecliptic long at EPOCH
RHOg=282.768422				# solar ecliptic long of perigee at EPOCH
ECCEN=0.016713				# solar orbit eccentricity
LZERO=318.351648			# lunar mean long at EPOCH
Pzero=36.340410				# lunar mean long of perigee at EPOCH
Nzero=318.510107			# lunar mean long of node at EPOCH

include Math

def potm(days)
        n = 360 * days / 365.242191
        n = adj360(n)
        msol = n + EPSILONg - RHOg
        msol = adj360(msol)
        ec = 360 / PI * ECCEN * sin(dtor(msol))
        lambdasol = n + ec + EPSILONg
        lambdasol = adj360(lambdasol)
        l = 13.1763966 * days + LZERO
        l = adj360(l);
        mm = l - (0.1114041 * days) - Pzero
        mm = adj360(mm);
        nm = Nzero - (0.0529539 * days)
        nm = adj360(nm);
        ev = 1.2739 * sin(dtor(2*(l - lambdasol) - mm))
        ac = 0.1858 * sin(dtor(msol))
        a3 = 0.37 * sin(dtor(msol))
        mmprime = mm + ev - ac - a3
        ec = 6.2886 * sin(dtor(mmprime))
        a4 = 0.214 * sin(dtor(2 * mmprime))
        lprime = l + ev + ec - ac + a4
        v = 0.6583 * sin(dtor(2 * (lprime - lambdasol)))
        ldprime = lprime + v
        d = ldprime - lambdasol
        return(50.0 * (1 - cos(dtor(d))))
end

def dtor(deg)
  deg * Math::PI / 180
end

def adj360(deg)
  loop do
    if (deg < 0)
      deg += 360;
    elsif (deg > 360)
      deg -= 360;
    else
      return deg
    end
  end
end

tmpt = (ARGV[0] ? Time.parse(ARGV[0]) : Time.now).to_i
days = (tmpt - EPOCH_MINUS_1970 * 86400) / 86400.0
printf "%1.0f%% full\n", potm(days) + 0.5

これによると私の誕生日は94% full、妻の誕生日は32% fullのようだ。 もうちょっとサンプルを取らないと本当に多いかどうかは断定できないが、 6人中3人が満月近くというのは結構偏っている印象がある。

追記

多いのは大潮の時だそうだ。 大潮だと新月の時も含むからうちの場合4/6になる。 日記巡回してみても確かにそんな感じだな。

追記

ライセンス表示が抜けていた。Ruby版もBSDライセンスに従う。 pom.cにはオリジナルBSDが記述されていたが、修正BSDライセンスを適用してかまわない。

_ [家族]誕生

15時42分に産まれました。女の子。2826g。 母子ともに健康そうです。


«前の日記(2004年10月27日) 最新 次の日記(2004年10月29日)» 編集