<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%3A%E5%A4%A9%E4%BF%9D%E6%9A%A6</id>
	<title>モジュール:天保暦 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%3A%E5%A4%A9%E4%BF%9D%E6%9A%A6"/>
	<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:%E5%A4%A9%E4%BF%9D%E6%9A%A6&amp;action=history"/>
	<updated>2026-06-06T18:59:05Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://monobook.org/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:%E5%A4%A9%E4%BF%9D%E6%9A%A6&amp;diff=15352&amp;oldid=prev</id>
		<title>2400:2410:261:AD00:E41E:F406:BB47:C940: ページの作成:「function int (value)   if value&lt;0 then     return math.ceiling (value)   else     return math.floor (value)   end end  function dec (value)   return value-int(value) end…」</title>
		<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:%E5%A4%A9%E4%BF%9D%E6%9A%A6&amp;diff=15352&amp;oldid=prev"/>
		<updated>2021-10-14T07:16:52Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「function int (value)   if value&amp;lt;0 then     return math.ceiling (value)   else     return math.floor (value)   end end  function dec (value)   return value-int(value) end…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;function int (value)&lt;br /&gt;
  if value&amp;lt;0 then&lt;br /&gt;
    return math.ceiling (value)&lt;br /&gt;
  else&lt;br /&gt;
    return math.floor (value)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function dec (value)&lt;br /&gt;
  return value-int(value)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function new_JdLng (jd, lng)&lt;br /&gt;
  return {jd, lng}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function JdLng_getJD (this)&lt;br /&gt;
  return this[1]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function JdLng_getLng (this)&lt;br /&gt;
  return this[2]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function new_MLJd (m, l, jd)&lt;br /&gt;
  return {m, l, jd}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MLJd_getMonth (this)&lt;br /&gt;
  return this[1]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MLJd_getLeap (this)&lt;br /&gt;
  return this[2]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MLJd_getJD (this)&lt;br /&gt;
  return this[3]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- 新暦に対応する、旧暦を求める。&lt;br /&gt;
-- &lt;br /&gt;
-- 呼び出し時にセットする変数&lt;br /&gt;
--   tm0 : 計算する日付（ユリウス日）&lt;br /&gt;
-- 戻り値&lt;br /&gt;
--   {&lt;br /&gt;
--   旧暦年,&lt;br /&gt;
--   平月／閏月フラグ（平月:false 閏月:true）,&lt;br /&gt;
--   旧暦月,&lt;br /&gt;
--   旧暦日&lt;br /&gt;
--   }&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
function calc_kyureki (tm0)&lt;br /&gt;
  local chu  = {false, false, false, false, false} -- (make-vector 5)&lt;br /&gt;
  local saku = {0, 0, 0, 0, 0}&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  計算対象の直前にあたる二分二至の時刻を求める&lt;br /&gt;
  --  chu[1]:二分二至の時刻と太陽黄経&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  chu[1] = before_nibun (tm0)&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  中気の時刻を計算（３回計算する）&lt;br /&gt;
  --  chu[i]:中気の時刻と太陽黄経&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  for i = 2, 4 do&lt;br /&gt;
    chu[i] = calc_chu(JdLng_getJD(chu[i-1])+32)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --   計算対象の直前にあたる二分二至の直前の朔の時刻を求める&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  saku[1] = calc_saku(JdLng_getJD(chu[1]))&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  朔の時刻を求める&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  for i = 2, 5 do&lt;br /&gt;
    local tm = saku[i-1] + 30&lt;br /&gt;
    saku[i] = calc_saku(tm)&lt;br /&gt;
    --  前と同じ時刻を計算した場合（両者の差が26日以内）には、初期値を&lt;br /&gt;
    --  +33日にして再実行させる。&lt;br /&gt;
    if math.abs(math.floor(saku[i-1])-math.floor(saku[i])) &amp;lt;= 26 then&lt;br /&gt;
      saku[i] = calc_saku(saku[i-1]+35)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  saku[2]が二分二至の時刻以前になってしまった場合には、朔をさかのぼり過ぎ&lt;br /&gt;
  --  たと考えて、朔の時刻を繰り下げて修正する。&lt;br /&gt;
  --  その際、計算もれ（saku[5]）になっている部分を補うため、朔の時刻を計算&lt;br /&gt;
  --  する。（近日点通過の近辺で朔があると起こる事があるようだ...？）&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  if math.floor(saku[2])&amp;lt;=math.floor(JdLng_getJD(chu[1])) then&lt;br /&gt;
    for i = 2, 5 do&lt;br /&gt;
      saku[i] = saku[i+1]&lt;br /&gt;
    end&lt;br /&gt;
    saku[5] = calc_saku(saku[4]+35)&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  saku[1]が二分二至の時刻以後になってしまった場合には、朔をさかのぼり足&lt;br /&gt;
  --  りないと見て、朔の時刻を繰り上げて修正する。&lt;br /&gt;
  --  その際、計算もれ（saku[1]）になっている部分を補うため、朔の時刻を計算&lt;br /&gt;
  --  する。（春分点の近辺で朔があると起こる事があるようだ...？）&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  elseif math.floor(JdLng_getJD(chu[1]))&amp;lt;math.floor(saku[1]) then&lt;br /&gt;
    for i = 5, 2, -1 do&lt;br /&gt;
      saku[i] = saku[i-1]&lt;br /&gt;
    end&lt;br /&gt;
    saku[1] = calc_saku(saku[1]-27)&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  閏月検索フラグ設定&lt;br /&gt;
  --  （節月で４ヶ月の間に朔が５回あると、閏月がある可能性がある。）&lt;br /&gt;
  --  isLeap=false:平月  isLeap=true:閏月&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local isLeap = math.floor(saku[5])&amp;lt;=math.floor(JdLng_getJD(chu[4]))&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  朔日ベクターの作成&lt;br /&gt;
  --  MLJd_getMonth (m[i]) ... 月名（1:正月 2:２月 3:３月 ....）&lt;br /&gt;
  --  MLJd_getLeap  (m[i]) ... 閏フラグ（false:平月 true:閏月）&lt;br /&gt;
  --  MLJd_getJD    (m[i]) ... 朔日のユリウス日&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local m = {false,false,false,false,false} -- (make-vector 5)&lt;br /&gt;
&lt;br /&gt;
  local month = int(JdLng_getLng(chu[1])/30)+2&lt;br /&gt;
  if 12&amp;lt;month then&lt;br /&gt;
    month = month-12&lt;br /&gt;
  end&lt;br /&gt;
  m[1] = new_MLJd (month, false, math.floor(saku[1]))&lt;br /&gt;
&lt;br /&gt;
  for i = 2, 5 do&lt;br /&gt;
    if isLeap and 2&amp;lt;i then&lt;br /&gt;
      local floor_chu_i1_jd = math.floor(JdLng_getJD(chu[i-1]))&lt;br /&gt;
      if not (math.floor(saku[i-1])&amp;lt;floor_chu_i1_jd and floor_chu_i1_jd&amp;lt;math.floor(saku[i])) then&lt;br /&gt;
        m[i-1] = new_MLJd (MLJd_getMonth(m[i-2]), true, math.floor(saku[i-1]))&lt;br /&gt;
        isLeap = false&lt;br /&gt;
      end -- if&lt;br /&gt;
    end  -- if&lt;br /&gt;
&lt;br /&gt;
    local month = MLJd_getMonth(m[i-1])+1&lt;br /&gt;
    if 12&amp;lt;month then&lt;br /&gt;
      month = month-12&lt;br /&gt;
    end&lt;br /&gt;
    m[i] = new_MLJd (month, false, math.floor(saku[i]))&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  朔日行列から旧暦を求める。&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local floor_tm0 = math.floor(tm0)&lt;br /&gt;
  local q = nil&lt;br /&gt;
  local i = 1&lt;br /&gt;
  while true do&lt;br /&gt;
    local floor_mi_jd = math.floor(MLJd_getJD(m[i]))&lt;br /&gt;
    if 5&amp;lt;i then&lt;br /&gt;
      q = m[i-1]&lt;br /&gt;
      break&lt;br /&gt;
    elseif floor_tm0 &amp;lt;  floor_mi_jd then&lt;br /&gt;
      q = m[i-1]&lt;br /&gt;
      break&lt;br /&gt;
    elseif floor_tm0 == floor_mi_jd then&lt;br /&gt;
      q = m[i]&lt;br /&gt;
      break&lt;br /&gt;
    else&lt;br /&gt;
      i = i+1&lt;br /&gt;
    end -- if&lt;br /&gt;
  end -- while&lt;br /&gt;
  local q_leap  = MLJd_getLeap  (q)&lt;br /&gt;
  local q_month = MLJd_getMonth (q)&lt;br /&gt;
  local q_day   = floor_tm0-math.floor(MLJd_getJD(q))+1&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  旧暦年の計算&lt;br /&gt;
  --  （旧暦月が10以上でかつ新暦月より大きい場合には、&lt;br /&gt;
  --    まだ年を越していないはず...）&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local YMDhms = JD2YMDT (tm0)&lt;br /&gt;
  local q_year =  YMDhms[1]&lt;br /&gt;
  if 9&amp;lt;q_month and YMDhms[2]&amp;lt;q_month then&lt;br /&gt;
    q_year = q_year - 1&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return {q_year, q_leap, q_month, q_day}&lt;br /&gt;
end -- calc_kyureki&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- 中気の時刻を求める&lt;br /&gt;
-- &lt;br /&gt;
-- 呼び出し時にセットする変数&lt;br /&gt;
--   tm0 ....... 計算対象となる時刻（ユリウス日）&lt;br /&gt;
-- 戻り値&lt;br /&gt;
--   中気の時刻、その時の黄経を JdLng 型で渡す&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
function calc_chu (tm0)&lt;br /&gt;
  local TOLERANCE = 1 / (24*60*60)&lt;br /&gt;
  local JULIAN_YEAR    =     365.25&lt;br /&gt;
  local JULIAN_CENTURY =   36525&lt;br /&gt;
  local J2000          = 2451545&lt;br /&gt;
  local JST = 9/24&lt;br /&gt;
&lt;br /&gt;
  local tm = tm0-JST&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  中気の黄経 λsun0 を求める&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local t0 = (tm+0.5-J2000)/JULIAN_CENTURY&lt;br /&gt;
  local rm_sun  = LONGITUDE_SUN (t0)&lt;br /&gt;
  local rm_sun0 = 30*int(rm_sun/30)&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  繰り返し計算によって中気の時刻を計算する&lt;br /&gt;
  --  （誤差が±1.0 sec以内になったら打ち切る。）&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local delta_t = 1&lt;br /&gt;
  while true do&lt;br /&gt;
    if math.abs(delta_t)&amp;lt;=TOLERANCE then&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  戻り値&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      return new_JdLng (tm+JST, rm_sun0)&lt;br /&gt;
    else&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  λsun を計算&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      local t = (tm+0.5-J2000)/JULIAN_CENTURY&lt;br /&gt;
      local rm_sun = LONGITUDE_SUN (t)&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  黄経差 Δλ＝λsun −λsun0&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      local delta_rm = rm_sun - rm_sun0&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        --  Δλの引き込み範囲（±180°）を逸脱した場合には、補正を行う&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        if     delta_rm &amp;gt;  180 then&lt;br /&gt;
          delta_rm = delta_rm - 360&lt;br /&gt;
        elseif delta_rm &amp;lt; -180 then&lt;br /&gt;
          delta_rm = delta_rm + 360&lt;br /&gt;
        else&lt;br /&gt;
          delta_rm = delta_rm&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  時刻引数の補正&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      delta_t = delta_rm*365.2/360&lt;br /&gt;
      tm = tm - delta_t&lt;br /&gt;
    end -- if&lt;br /&gt;
  end -- while&lt;br /&gt;
end -- calc_chu&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- 直前の二分二至の時刻を求める&lt;br /&gt;
-- &lt;br /&gt;
-- 呼び出し時にセットする変数&lt;br /&gt;
--   tm0 ....... 計算対象となる時刻（ユリウス日）&lt;br /&gt;
-- 戻り値&lt;br /&gt;
--   二分二至の時刻、その時の黄経をJdLng 型で渡す&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
function before_nibun (tm0)&lt;br /&gt;
  local TOLERANCE = 1 / (24*60*60)&lt;br /&gt;
  local JULIAN_YEAR    =     365.25&lt;br /&gt;
  local JULIAN_CENTURY =   36525&lt;br /&gt;
  local J2000          = 2451545&lt;br /&gt;
  local JST = 9/24&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  -- 時刻引数を分解する&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local tm = tm0-JST&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  直前の二分二至の黄経 λsun0 を求める&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local t = (tm+0.5-J2000)/JULIAN_CENTURY&lt;br /&gt;
  local rm_sun = LONGITUDE_SUN (t)&lt;br /&gt;
  local rm_sun0 = 90*int(rm_sun/90)&lt;br /&gt;
&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  繰り返し計算によって直前の二分二至の時刻を計算する&lt;br /&gt;
  --  （誤差が±1.0 sec以内になったら打ち切る。）&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  local delta_t = 1&lt;br /&gt;
  while true do&lt;br /&gt;
    if math.abs(delta_t)&amp;lt;=TOLERANCE then&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  戻り値&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      return new_JdLng (tm+JST, rm_sun0)&lt;br /&gt;
    else&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  λsun を計算&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      local t = (tm+0.5-J2000)/JULIAN_CENTURY&lt;br /&gt;
      local rm_sun = LONGITUDE_SUN (t)&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  黄経差 Δλ＝λsun −λsun0&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      local delta_rm = rm_sun - rm_sun0&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        --  Δλの引き込み範囲（±180°）を逸脱した場合には、補正を行う&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        if     delta_rm &amp;gt; 180 then&lt;br /&gt;
          delta_rm = delta_rm - 360&lt;br /&gt;
        elseif delta_rm &amp;lt; -180 then&lt;br /&gt;
          delta_rm = delta_rm + 360&lt;br /&gt;
        else&lt;br /&gt;
          delta_rm = delta_rm&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  時刻引数の補正&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      delta_t  = delta_rm*365.2/360&lt;br /&gt;
      tm = tm - delta_t&lt;br /&gt;
    end -- if&lt;br /&gt;
  end -- while&lt;br /&gt;
end -- before_nibun&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- 朔の計算&lt;br /&gt;
-- 与えられた時刻の直近の朔の時刻（JST）を求める&lt;br /&gt;
-- &lt;br /&gt;
-- 呼び出し時にセットする変数&lt;br /&gt;
--   tm0 ....... 計算対象となる時刻（ユリウス日）&lt;br /&gt;
-- 戻り値&lt;br /&gt;
--   朔の時刻&lt;br /&gt;
-- &lt;br /&gt;
-- ※ 引数、戻り値ともユリウス日で表し、時分秒は日の小数で表す。&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
function calc_saku (tm0)&lt;br /&gt;
  local TOLERANCE = 1 / (24*60*60)&lt;br /&gt;
  local JULIAN_YEAR    =     365.25&lt;br /&gt;
  local JULIAN_CENTURY =   36525&lt;br /&gt;
  local J2000          = 2451545&lt;br /&gt;
  local JST = 9/24&lt;br /&gt;
&lt;br /&gt;
  local count = 1&lt;br /&gt;
  local tm = tm0 - JST&lt;br /&gt;
  local delta_t = 1&lt;br /&gt;
  while true do&lt;br /&gt;
    -- -----------------------------------------------------------------------&lt;br /&gt;
    --  繰り返し計算によって朔の時刻を計算する&lt;br /&gt;
    --  （誤差が±1.0 sec以内になったら打ち切る。）&lt;br /&gt;
    -- -----------------------------------------------------------------------&lt;br /&gt;
    if math.abs(delta_t)&amp;lt;=TOLERANCE then&lt;br /&gt;
      return JST + tm&lt;br /&gt;
    else&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  太陽の黄経λsun ,月の黄経λmoon を計算&lt;br /&gt;
      --  t = (tm - 2451548.0 + 0.5)/JULIAN_CENTURY;&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      local t = (tm + 0.5 - J2000) / JULIAN_CENTURY&lt;br /&gt;
      local Sun_lng  = LONGITUDE_SUN  (t)&lt;br /&gt;
      local Moon_lng = LONGITUDE_MOON (t)&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  月と太陽の黄経差Δλ&lt;br /&gt;
      --  Δλ＝λmoon−λsun&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      local delta_lng = Moon_lng - Sun_lng&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        --  ループの１回目（count=1）で delta_lng＜0 の場合には引き込み範囲に&lt;br /&gt;
        --  入るように補正する&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        if 1==count and delta_lng&amp;lt;0 then&lt;br /&gt;
          delta_lng = NORMALIZATION_ANGLE (delta_lng)&lt;br /&gt;
&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        --  春分の近くで朔がある場合（0 ≦λsun≦ 20）で、月の黄経λmoon≧300 の&lt;br /&gt;
        --  場合には、Δλ＝ 360 − Δλ と計算して補正する&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        elseif 0&amp;lt;=Sun_lng and Sun_lng&amp;lt;=20 and 300&amp;lt;=Moon_lng then&lt;br /&gt;
          delta_lng = 360 - NORMALIZATION_ANGLE (delta_lng)&lt;br /&gt;
&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        --  Δλの引き込み範囲（±40°）を逸脱した場合には、補正を行う&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        elseif 40&amp;lt;math.abs(delta_lng) then&lt;br /&gt;
          delta_lng = NORMALIZATION_ANGLE (delta_lng)&lt;br /&gt;
&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        --  補正なし&lt;br /&gt;
        -- -----------------------------------------------------------------------&lt;br /&gt;
        else&lt;br /&gt;
          delta_lng = delta_lng&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  時刻引数の補正値 Δt&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      delta_t  = delta_lng * 29.530589 / 360.0&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  ループ回数が15回になったら、初期値 tm0 を tm0-26 とする。&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      if 15==count and TOLERANCE&amp;lt;math.abs(delta_t) then&lt;br /&gt;
        count = count + 1&lt;br /&gt;
        tm = int(tm0-26)&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  初期値を補正したにも関わらず、振動を続ける場合には初期値を答えとして&lt;br /&gt;
      --  返して強制的にループを抜け出して異常終了させる。&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      elseif 30&amp;lt;count and TOLERANCE&amp;lt;math.abs(delta_t) then&lt;br /&gt;
        return JST + tm0&lt;br /&gt;
&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      --  通常の場合&lt;br /&gt;
      -- -----------------------------------------------------------------------&lt;br /&gt;
      else&lt;br /&gt;
        count = count + 1&lt;br /&gt;
        tm = tm - delta_t&lt;br /&gt;
      end -- if&lt;br /&gt;
    end -- if&lt;br /&gt;
  end -- while&lt;br /&gt;
end -- calc_saku&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
--  角度の正規化を行う。すなわち引数の範囲を ０≦θ＜３６０ にする。&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
function NORMALIZATION_ANGLE (angle)&lt;br /&gt;
  if angle&amp;lt;0 then&lt;br /&gt;
    return 360 - NORMALIZATION_ANGLE (-1 * angle)&lt;br /&gt;
  else&lt;br /&gt;
    return dec (angle/360) * 360&lt;br /&gt;
  end&lt;br /&gt;
end -- NORMALIZATION_ANGLE&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- 太陽の黄経 λsun を計算する&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
local PI_OVER_180 = math.pi/180&lt;br /&gt;
&lt;br /&gt;
function cos_deg (angle)&lt;br /&gt;
  return math.cos (PI_OVER_180*NORMALIZATION_ANGLE (angle))&lt;br /&gt;
end -- cos_deg&lt;br /&gt;
&lt;br /&gt;
function LONGITUDE_SUN (t)&lt;br /&gt;
  local a = 0&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  摂動項の計算&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  a = a + 0.0004*cos_deg(( 31557.0*t)+161.0)&lt;br /&gt;
  a = a + 0.0004*cos_deg(( 29930.0*t)+ 48.0)&lt;br /&gt;
  a = a + 0.0005*cos_deg((  2281.0*t)+221.0)&lt;br /&gt;
  a = a + 0.0005*cos_deg((   155.0*t)+118.0)&lt;br /&gt;
  a = a + 0.0006*cos_deg(( 33718.0*t)+316.0)&lt;br /&gt;
  a = a + 0.0007*cos_deg((  9038.0*t)+ 64.0)&lt;br /&gt;
  a = a + 0.0007*cos_deg((  3035.0*t)+110.0)&lt;br /&gt;
  a = a + 0.0007*cos_deg(( 65929.0*t)+ 45.0)&lt;br /&gt;
  a = a + 0.0013*cos_deg(( 22519.0*t)+352.0)&lt;br /&gt;
  a = a + 0.0015*cos_deg(( 45038.0*t)+254.0)&lt;br /&gt;
  a = a + 0.0018*cos_deg((445267.0*t)+208.0)&lt;br /&gt;
  a = a + 0.0018*cos_deg((    19.0*t)+159.0)&lt;br /&gt;
  a = a + 0.0020*cos_deg(( 32964.0*t)+158.0)&lt;br /&gt;
  a = a + 0.0200*cos_deg(( 71998.1*t)+265.1)&lt;br /&gt;
  a = a + (-0.0048*t+1.9147)*cos_deg(35999.05*t+267.52)&lt;br /&gt;
  &lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  比例項の計算&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  a = a + 36000.7695*t+280.4659&lt;br /&gt;
  &lt;br /&gt;
  return NORMALIZATION_ANGLE (a)&lt;br /&gt;
end -- LONGITUDE_SUN&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- 月の黄経 λmoon を計算する&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
function LONGITUDE_MOON (t)&lt;br /&gt;
  local a = 0&lt;br /&gt;
  &lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  摂動項の計算&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  a = a + 0.0003*cos_deg((2322131.0*t)+191.0)&lt;br /&gt;
  a = a + 0.0003*cos_deg((   4067.0*t)+ 70.0)&lt;br /&gt;
  a = a + 0.0003*cos_deg(( 549197.0*t)+220.0)&lt;br /&gt;
  a = a + 0.0003*cos_deg((1808933.0*t)+ 58.0)&lt;br /&gt;
  a = a + 0.0003*cos_deg(( 349472.0*t)+337.0)&lt;br /&gt;
  a = a + 0.0003*cos_deg(( 381404.0*t)+354.0)&lt;br /&gt;
  a = a + 0.0003*cos_deg(( 958465.0*t)+340.0)&lt;br /&gt;
  a = a + 0.0004*cos_deg((  12006.0*t)+187.0)&lt;br /&gt;
  a = a + 0.0004*cos_deg((  39871.0*t)+223.0)&lt;br /&gt;
  a = a + 0.0005*cos_deg(( 509131.0*t)+242.0)&lt;br /&gt;
  a = a + 0.0005*cos_deg((1745069.0*t)+ 24.0)&lt;br /&gt;
  a = a + 0.0005*cos_deg((1908795.0*t)+ 90.0)&lt;br /&gt;
  a = a + 0.0006*cos_deg((2258267.0*t)+156.0)&lt;br /&gt;
  a = a + 0.0006*cos_deg(( 111869.0*t)+ 38.0)&lt;br /&gt;
  a = a + 0.0007*cos_deg((  27864.0*t)+127.0)&lt;br /&gt;
  a = a + 0.0007*cos_deg(( 485333.0*t)+186.0)&lt;br /&gt;
  a = a + 0.0007*cos_deg(( 405201.0*t)+ 50.0)&lt;br /&gt;
  a = a + 0.0007*cos_deg(( 790672.0*t)+114.0)&lt;br /&gt;
  a = a + 0.0008*cos_deg((1403732.0*t)+ 98.0)&lt;br /&gt;
  a = a + 0.0009*cos_deg(( 858602.0*t)+129.0)&lt;br /&gt;
  a = a + 0.0011*cos_deg((1920802.0*t)+186.0)&lt;br /&gt;
  a = a + 0.0012*cos_deg((1267871.0*t)+249.0)&lt;br /&gt;
  a = a + 0.0016*cos_deg((1856938.0*t)+152.0)&lt;br /&gt;
  a = a + 0.0018*cos_deg(( 401329.0*t)+274.0)&lt;br /&gt;
  a = a + 0.0021*cos_deg(( 341337.0*t)+ 16.0)&lt;br /&gt;
  a = a + 0.0021*cos_deg((  71998.0*t)+ 85.0)&lt;br /&gt;
  a = a + 0.0021*cos_deg(( 990397.0*t)+357.0)&lt;br /&gt;
  a = a + 0.0022*cos_deg(( 818536.0*t)+151.0)&lt;br /&gt;
  a = a + 0.0023*cos_deg(( 922466.0*t)+163.0)&lt;br /&gt;
  a = a + 0.0024*cos_deg((  99863.0*t)+122.0)&lt;br /&gt;
  a = a + 0.0026*cos_deg((1379739.0*t)+ 17.0)&lt;br /&gt;
  a = a + 0.0027*cos_deg(( 918399.0*t)+182.0)&lt;br /&gt;
  a = a + 0.0028*cos_deg((   1934.0*t)+145.0)&lt;br /&gt;
  a = a + 0.0037*cos_deg(( 541062.0*t)+259.0)&lt;br /&gt;
  a = a + 0.0038*cos_deg((1781068.0*t)+ 21.0)&lt;br /&gt;
  a = a + 0.0040*cos_deg((    133.0*t)+ 29.0)&lt;br /&gt;
  a = a + 0.0040*cos_deg((1844932.0*t)+ 56.0)&lt;br /&gt;
  a = a + 0.0040*cos_deg((1331734.0*t)+283.0)&lt;br /&gt;
  a = a + 0.0050*cos_deg(( 481266.0*t)+205.0)&lt;br /&gt;
  a = a + 0.0052*cos_deg((  31932.0*t)+107.0)&lt;br /&gt;
  a = a + 0.0068*cos_deg(( 926533.0*t)+323.0)&lt;br /&gt;
  a = a + 0.0079*cos_deg(( 449334.0*t)+188.0)&lt;br /&gt;
  a = a + 0.0085*cos_deg(( 826671.0*t)+111.0)&lt;br /&gt;
  a = a + 0.0100*cos_deg((1431597.0*t)+315.0)&lt;br /&gt;
  a = a + 0.0107*cos_deg((1303870.0*t)+246.0)&lt;br /&gt;
  a = a + 0.0110*cos_deg(( 489205.0*t)+142.0)&lt;br /&gt;
  a = a + 0.0125*cos_deg((1443603.0*t)+ 52.0)&lt;br /&gt;
  a = a + 0.0154*cos_deg((  75870.0*t)+ 41.0)&lt;br /&gt;
  a = a + 0.0304*cos_deg(( 513197.9*t)+222.5)&lt;br /&gt;
  a = a + 0.0347*cos_deg(( 445267.1*t)+ 27.9)&lt;br /&gt;
  a = a + 0.0409*cos_deg(( 441199.8*t)+ 47.4)&lt;br /&gt;
  a = a + 0.0458*cos_deg(( 854535.2*t)+148.2)&lt;br /&gt;
  a = a + 0.0533*cos_deg((1367733.1*t)+280.7)&lt;br /&gt;
  a = a + 0.0571*cos_deg(( 377336.3*t)+ 13.2)&lt;br /&gt;
  a = a + 0.0588*cos_deg((  63863.5*t)+124.2)&lt;br /&gt;
  a = a + 0.1144*cos_deg(( 966404.0*t)+276.5)&lt;br /&gt;
  a = a + 0.1851*cos_deg((  35999.05*t)+ 87.53)&lt;br /&gt;
  a = a + 0.2136*cos_deg(( 954397.74*t)+179.93)&lt;br /&gt;
  a = a + 0.6583*cos_deg(( 890534.22*t)+145.7)&lt;br /&gt;
  a = a + 1.2740*cos_deg(( 413335.35*t)+ 10.74)&lt;br /&gt;
  a = a + 6.2888*cos_deg((477198.868*t)+44.963)&lt;br /&gt;
  &lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  --  比例項の計算&lt;br /&gt;
  -- -----------------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
  a = a + 481267.8809*t+218.3162&lt;br /&gt;
  &lt;br /&gt;
  return NORMALIZATION_ANGLE (a)&lt;br /&gt;
end -- LONGITUDE_MOON&lt;br /&gt;
&lt;br /&gt;
-- =========================================================================&lt;br /&gt;
-- 年月日、時分秒（世界時）からユリウス日（JD）を計算する&lt;br /&gt;
-- &lt;br /&gt;
-- ※ この関数では、グレゴリオ暦法による年月日から求めるものである。&lt;br /&gt;
--    （ユリウス暦法による年月日から求める場合には使用できない。）&lt;br /&gt;
-- =========================================================================&lt;br /&gt;
&lt;br /&gt;
function YMDT2JD (year, month, day, hour, min, sec)&lt;br /&gt;
  if month &amp;lt; 3 then&lt;br /&gt;
    year  = year  -  1&lt;br /&gt;
    month = month + 12&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  local jd = 1721088&lt;br /&gt;
  jd = jd + int (365.25 * year)&lt;br /&gt;
  jd = jd + int (year / 400)&lt;br /&gt;
  jd = jd - int (year / 100)&lt;br /&gt;
  jd = jd + int (30.59 * (month-2))&lt;br /&gt;
  jd = jd + day&lt;br /&gt;
  jd = jd + (sec/3600.0+min/60.0+hour)/24.0&lt;br /&gt;
&lt;br /&gt;
  return jd&lt;br /&gt;
end -- YMDT2JD &lt;br /&gt;
&lt;br /&gt;
-- =========================================================================&lt;br /&gt;
-- ユリウス日（JD）から年月日、時分秒（世界時）を計算する&lt;br /&gt;
-- &lt;br /&gt;
-- 戻り値の配列TIME[]の内訳&lt;br /&gt;
-- TIME[1] ... 年  TIME[2] ... 月  TIME[3] ... 日&lt;br /&gt;
-- TIME[4] ... 時  TIME[5] ... 分  TIME[6] ... 秒&lt;br /&gt;
-- &lt;br /&gt;
-- ※ この関数で求めた年月日は、グレゴリオ暦法によって表されている。&lt;br /&gt;
-- &lt;br /&gt;
-- =========================================================================&lt;br /&gt;
&lt;br /&gt;
function JD2YMDT (JD)&lt;br /&gt;
  local x0 = int (JD+68570.0)&lt;br /&gt;
  local x1 = int (x0/36524.25)&lt;br /&gt;
  local x2 = x0 - int (36524.25*x1 + 0.75)&lt;br /&gt;
  local x3 = int ((x2+1)/365.2425 )&lt;br /&gt;
  local x4 = x2 - int (365.25*x3)+31.0&lt;br /&gt;
  local x5 = int (int(x4)/30.59)&lt;br /&gt;
  local x6 = int (int(x5)/11.0)&lt;br /&gt;
&lt;br /&gt;
  local TIME = {0,0,0,0,0,0}&lt;br /&gt;
  TIME[3] = x4 - int (30.59*x5)&lt;br /&gt;
  TIME[2] = x5 - 12*x6 + 2&lt;br /&gt;
  TIME[1] = 100*(x1-49) + x3 + x6&lt;br /&gt;
&lt;br /&gt;
  --  2月30日の補正&lt;br /&gt;
&lt;br /&gt;
  if TIME[2]==2 and TIME[3]&amp;gt;28 then&lt;br /&gt;
    if TIME[1]%100==0 and TIME[1]%400==0 then&lt;br /&gt;
       TIME[3]=29&lt;br /&gt;
    elseif TIME[1]%4==0 then&lt;br /&gt;
       TIME[3]=29&lt;br /&gt;
    else&lt;br /&gt;
       TIME[3]=28&lt;br /&gt;
    end -- if&lt;br /&gt;
  end -- if&lt;br /&gt;
&lt;br /&gt;
  local tm = 24*60*60*dec(JD)&lt;br /&gt;
  TIME[4] = int(tm/3600)&lt;br /&gt;
  TIME[5] = int(tm%3600/60)&lt;br /&gt;
  TIME[6] = int(tm%60)&lt;br /&gt;
&lt;br /&gt;
  return TIME&lt;br /&gt;
end -- JD2YMDT&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
function fromGregorianCalendar (gregorianYear, gregorianMonth, gregorianDay)&lt;br /&gt;
  local gY = tonumber (gregorianYear)&lt;br /&gt;
  if (not gY) or 0&amp;lt;dec(gY) then&lt;br /&gt;
    return &amp;quot;第1引数は整数でなければなりません。(&amp;quot; .. gregorianYear .. &amp;quot;)&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  local gM = tonumber (gregorianMonth)&lt;br /&gt;
  if (not gM) or 0&amp;lt;dec(gM) then&lt;br /&gt;
    return &amp;quot;第2引数は整数でなければなりません。(&amp;quot; .. gregorianMonth .. &amp;quot;)&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  local gD = tonumber (gregorianDay)&lt;br /&gt;
  if (not gD) or 0&amp;lt;dec(gD) then&lt;br /&gt;
    return &amp;quot;第3引数は整数でなければなりません。(&amp;quot; .. gregorianDay .. &amp;quot;)&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  local jd = YMDT2JD (gY, gM, gD, 0, 0, 0)&lt;br /&gt;
  local q = calc_kyureki (jd)&lt;br /&gt;
  &lt;br /&gt;
  local q_2 = &amp;quot;&amp;quot;&lt;br /&gt;
  if q[2] then&lt;br /&gt;
    q_2 = &amp;quot;閏&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  -- return string.format (&amp;quot;グレゴリオ暦: %d年%d月%d日&amp;quot;,gY,gM,gD)&lt;br /&gt;
  return string.format (&amp;quot;天保壬寅元暦: %d年%s%d月%d日&amp;quot;,q[1],q_2,q[3],q[4])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
&lt;br /&gt;
local TenpouCalendar = {}&lt;br /&gt;
&lt;br /&gt;
function toarray(table)&lt;br /&gt;
  local values = {}&lt;br /&gt;
  for key,value in pairs(table) do&lt;br /&gt;
    key = tonumber(key)&lt;br /&gt;
    if key then&lt;br /&gt;
      values[key] = value&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return values&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TenpouCalendar.fromGregorianCalendar (frame)&lt;br /&gt;
  return fromGregorianCalendar (unpack (toarray (frame.args)))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return  TenpouCalendar&lt;br /&gt;
-- ========================================================================&lt;br /&gt;
-- [EOF]&lt;/div&gt;</summary>
		<author><name>2400:2410:261:AD00:E41E:F406:BB47:C940</name></author>
	</entry>
</feed>