CalcBox - 暮らしに役立つ無料計算ツール61種類以上を公開

BMI計算、消費税計算、ローン計算、通貨換算、年齢計算、カロリー計算など、日常生活で役立つ61種類以上の無料計算ツールを提供するCalcBoxを紹介。ローン返済額・複利計算の数式導出、ゼロ金利の特異点、うるう年の日数計算規約、浮動小数点誤差といった金融計算の理論とPython実装も解説します。

CalcBoxとは

CalcBox は、日常生活の様々な計算をブラウザ上で手軽に行えるツール集です。61種類以上の計算ツールを無料で、登録不要で利用できます。本記事では各ツールへのリンクに加えて、特にお金まわりの計算(ローン返済額・複利計算)を題材に、その背後にある数式の導出、ゼロ金利やうるう年で生じる計算上の落とし穴、Pythonによる実装検証までを掘り下げます。

カテゴリ別ツール紹介

生活

日々の暮らしで使える便利な計算ツールです。

健康

体の管理に役立つ計算ツールです。

お金

家計管理や資産運用に役立つ計算ツールです。次章以降ではこのうちローン計算複利計算を数式レベルで掘り下げます。

時間・日付

日時に関する計算ツールです。

開発者向け

エンジニアが使える計算・変換ツールも充実しています。

ローン返済額と複利計算の導出

「ローン計算」「複利計算」ツールが内部で使っている式を、年金現価(present value of annuity)の関係から導出します。

年金現価からの元利均等返済額の導出

元本 \(P\) 、1期間あたりの利率 \(r\) (月利など)、返済回数 \(n\) で毎回同額 \(M\) を返済する元利均等返済を考えます。\(k\) 回目の支払い \(M\) の現在価値は \(M/(1+r)^k\) なので、\(n\) 回分の支払いの現在価値の合計が元本 \(P\) に一致するという条件から

\[ P = \sum_{k=1}^{n} \frac{M}{(1+r)^k} \tag{1} \]

が成り立ちます。右辺は公比 \(x = 1/(1+r)\) の等比数列の和 \(\sum_{k=1}^n x^k = x\dfrac{1-x^n}{1-x}\) そのものです。\(x = 1/(1+r)\) を代入すると

\[ \sum_{k=1}^{n} \frac{1}{(1+r)^k} = \frac{1}{1+r} \cdot \frac{1-(1+r)^{-n}}{1-\frac{1}{1+r}} = \frac{1}{1+r} \cdot \frac{1-(1+r)^{-n}}{\frac{r}{1+r}} = \frac{1-(1+r)^{-n}}{r} \tag{2} \]

となるため、式 (1) は

\[ P = M \cdot \frac{1-(1+r)^{-n}}{r} \tag{3} \]

と書けます。これを \(M\) について解けば

\[ M = P \cdot \frac{r}{1-(1+r)^{-n}} = P\, \frac{r(1+r)^n}{(1+r)^n - 1} \tag{4} \]

が得られます。これが CalcBox の ローン計算 ツールが使う標準的な元利均等返済額の公式です。式 (3) は「毎月の返済額 \(M\) を年金として割り引いた現在価値の総和が、借入時点の元本 \(P\) に等しい」という自明な会計上の恒等式にすぎず、式 (4) はそれを単に \(M\) について逆算したものです。

複利計算と連続複利の極限

元本 \(P\) を年利 \(r\) 、年 \(m\) 回複利で \(t\) 年間運用したときの元利合計は

\[ A(m) = P\left(1+\frac{r}{m}\right)^{mt} \tag{5} \]

です。複利計算 ツール で複利回数 \(m\) を大きくしていくと、この式は連続複利の極限に収束します。\(x = r/m\) とおくと \(m \to \infty\) は \(x \to 0\) に対応し、

\[ A(m) = P\left[(1+x)^{1/x}\right]^{rt} \tag{6} \]

と書き直せます。ここでネイピア数の定義 \(\lim_{x\to 0}(1+x)^{1/x} = e\) を使うと

\[ \lim_{m\to\infty} A(m) = P \, e^{rt} \tag{7} \]

が導けます。これが連続複利の公式 \(A = Pe^{rt}\) です。次節の実行結果で、複利回数 \(m\) を 1 回(年複利)から 100 万回まで増やしたときに式 (5) が式 (7) の値へ単調に収束していく様子を数値で確認します。

エッジケース:計算が「壊れる」瞬間

見た目はシンプルな式 (4) や (5) も、実際の入力によっては数値的な落とし穴を持ちます。ここでは3つの代表的なケースを検証します。

ゼロ金利という特異点(0/0 の不定形)

式 (4) の \(M = P\,r(1+r)^n / ((1+r)^n-1)\) に \(r=0\) を代入すると、分子は \(0 \cdot 1^n = 0\) 、分母は \(1^n - 1 = 0\) となり、0/0 の不定形です。実際に Python でこの式をそのまま評価すると ZeroDivisionError になります(後述の実行結果を参照)。

正しい極限値は、分子 \(f(r) = r(1+r)^n\) 、分母 \(g(r) = (1+r)^n - 1\) として、ロピタルの定理を使えば求まります。

\[ f'(r) = (1+r)^n + n r (1+r)^{n-1}, \qquad g'(r) = n(1+r)^{n-1} \tag{8} \]

\(r=0\) を代入すると \(f'(0) = 1\) 、\(g'(0) = n\) なので

\[ \lim_{r \to 0} \frac{f(r)}{g(r)} = \frac{f'(0)}{g'(0)} = \frac{1}{n} \tag{9} \]

したがって \(r \to 0\) での正しい返済額は

\[ M \Big|_{r=0} = \frac{P}{n} \tag{10} \]

つまり「元本を単純に返済回数で割った額」に一致します。これは金利ゼロならば利息が発生せず、元本を均等分割するだけになるという直感とも合致します。テイラー展開 \((1+r)^n \approx 1 + nr + \binom{n}{2}r^2\) で分子・分母を1次までで近似しても同じ結論 \(M \to P/n\) に到達することを、後述のPython実行結果で数値的に確認します。

さらに実務上重要なのは、\(r=0\) ちょうどでなくても、\(r\) が極端に小さい領域(\(r \sim 10^{-12}\) 程度)では式 (4) の分母 \((1+r)^n - 1\) が**桁落ち(catastrophic cancellation)**を起こし、数値的に不安定になる点です。\((1+r)^n\) は浮動小数点上では \(1\) に極めて近い値として表現されるため、そこから \(1\) を引き算すると有効桁数の大部分が失われます。実行結果ではこの桁落ちにより、\(r\) を小さくしていくと一旦 \(P/n\) に収束したあと、\(r < 10^{-10}\) 程度から逆に誤差が増大に転じる様子が確認できます。実務的な実装では、\(r\) がある閾値(例えば \(10^{-8}\) 未満)を下回ったら式 (4) ではなく式 (10) を直接使う、という条件分岐が必要です。

うるう年と日数計算規約(30/360 vs Actual/365 vs Actual/Actual)

日割り利息の計算では、同じ「年利」「同じ期間」でも**日数の数え方(day count convention)**によって結果が変わります。代表的な3方式は次の通りです。

規約分子(経過日数)の数え方分母(年間日数)
30/3601ヶ月を常に30日とみなして計算360日固定
Actual/365暦通りの実日数365日固定
Actual/Actual暦通りの実日数実際の年間日数(うるう年は366日)

日割り利息は \(I = P \cdot r \cdot (\text{経過日数}/\text{分母の日数})\) で計算されるため、うるう年の2月をまたぐ期間では Actual 系の分子は自動的に1日増えます。後述のPython実行結果では、うるう年である2028年の1/15〜3/15(実日数60日、30/360でも60日)に対して、3方式で利息が81,967円〜83,333円の範囲でぶれ、最大で約1,366円の差が生じることを確認します。平年である2027年の同じ日付範囲では実日数が59日となり、Actual/365 と Actual/Actual が一致することも合わせて検証します。

浮動小数点誤差の蓄積:反復計算 vs 閉形式

複利計算をシミュレーションする際、「毎日の利息を1日ずつ乗算していくループ」と「閉形式の式 (5) を1回で評価する」のどちらで実装するかで、実は数値誤差の蓄積具合が異なります。float64(倍精度)であれば通常は無視できる誤差ですが、float32(単精度)でループ計算を行うと、10,950回(30年分の日次複利)の乗算の丸め誤差が蓄積し、無視できない金額差になることを実行結果で示します。

Python実装で検証

30年住宅ローンの実例

元本3,000万円、年利3%(月利に換算)、30年(360回)の元利均等返済を計算し、返済スケジュール全体を検証します。

def amortization_payment(P, r, n):
    """標準的なローン返済額の公式 M = P r(1+r)^n / ((1+r)^n - 1)"""
    return P * r * (1 + r) ** n / ((1 + r) ** n - 1)


P = 30_000_000.0        # 元本(円)
annual_rate = 0.03      # 年利
n_years = 30
n = n_years * 12         # 返済回数(月次)
r = annual_rate / 12     # 月利

M = amortization_payment(P, r, n)
total_paid = M * n
total_interest = total_paid - P

print(f"P = {P:,.0f} 円, 年利 = {annual_rate:.1%}, n = {n} 回, r = {r:.6f}")
print(f"毎月の返済額 M = {M:,.2f} 円")
print(f"総支払額 = {total_paid:,.2f} 円")
print(f"総利息 = {total_interest:,.2f} 円")

# 返済スケジュールを1回ずつ計算し、元本・利息の内訳と残高推移を検証
balance = P
principal_parts, interest_parts, balances = [], [], [P]
for k in range(1, n + 1):
    interest_k = balance * r
    principal_k = M - interest_k
    balance -= principal_k
    principal_parts.append(principal_k)
    interest_parts.append(interest_k)
    balances.append(balance)

print(f"最終残高({n}回返済後): {balance:.10f} 円(0に近いはず)")
print(f"元本部分の合計: {sum(principal_parts):,.2f} 円(P={P:,.2f}と一致するはず)")
print(f"利息部分の合計: {sum(interest_parts):,.2f} 円(総利息={total_interest:,.2f}と一致するはず)")
print(f"1回目: 元本={principal_parts[0]:.2f}, 利息={interest_parts[0]:.2f}")
print(f"最終回(n={n}): 元本={principal_parts[-1]:.2f}, 利息={interest_parts[-1]:.2f}")

実行結果は次の通りです。

P = 30,000,000 円, 年利 = 3.0%, n = 360 回, r = 0.002500
毎月の返済額 M = 126,481.21 円
総支払額 = 45,533,235.64 円
総利息 = 15,533,235.64 円
最終残高(360回返済後): -0.0000009574 円(0に近いはず)
元本部分の合計: 30,000,000.00 円(P=30,000,000.00と一致するはず)
利息部分の合計: 15,533,235.64 円(総利息=15,533,235.64と一致するはず)
1回目: 元本=51481.21, 利息=75000.00
最終回(n=360): 元本=126165.80, 利息=315.41

最終残高が理論上ゼロになるべきところ、実際には \(-9.57 \times 10^{-7}\) 円というごく小さな浮動小数点誤差が残ります。これは360回の減算の丸め誤差が蓄積した結果であり、実用上は無視できる大きさです。元本・利息の内訳の合計もそれぞれ元本総額・総利息と完全に一致しており、式 (4) の導出が正しいことが実測でも確認できます。初回の返済では利息(75,000円)が元本(51,481円)を上回りますが、最終回では元本(126,166円)がほとんどを占め利息はわずか315円まで減少しており、これが「元利均等返済では返済初期ほど利息の比率が高い」という一般的な性質を裏付けています。

ゼロ金利極限の検証

式 (4) を \(r=0\) でそのまま評価した場合の挙動と、式 (10) で導いた正しい極限、およびその収束過程を確認します。

# r=0 をそのまま代入した場合
r_zero = 0.0
numerator = r_zero * (1 + r_zero) ** n
denominator = (1 + r_zero) ** n - 1
print(f"r=0: 分子={numerator}, 分母={denominator}")

try:
    bad = numerator / denominator
except ZeroDivisionError as e:
    print(f"ZeroDivisionError発生: {e}")

# 正しい極限
limit_formula = P / n
print(f"正しい極限(ロピタルの定理): M = P/n = {limit_formula:.6f}")

# r -> 0 に近づけたときの収束を確認
for rr in [1e-2, 1e-4, 1e-6, 1e-8, 1e-10, 1e-12]:
    val = amortization_payment(P, rr, n)
    print(f"  r={rr:<10g}  M(r)={val:.8f}  P/nとの差={val - limit_formula:.3e}")

for rr in [1e-14, 1e-16, 0.0]:
    denom = (1 + rr) ** n - 1
    if denom == 0:
        print(f"  r={rr:<10g}  (1+r)^n - 1 = 0.0(浮動小数点上でゼロ)→ 式(4)はゼロ除算になる")
    else:
        val = amortization_payment(P, rr, n)
        print(f"  r={rr:<10g}  M(r)={val:.8f}  分母={denom:.3e}")

実行結果です。

r=0: 分子=0.0, 分母=0.0
ZeroDivisionError発生: division by zero
正しい極限(ロピタルの定理): M = P/n = 83333.333333
  r=0.01        M(r)=308583.77907765  P/nとの差=2.253e+05
  r=0.0001      M(r)=84846.49928623  P/nとの差=1.513e+03
  r=1e-06       M(r)=83348.37590683  P/nとの差=1.504e+01
  r=1e-08       M(r)=83333.48425806  P/nとの差=1.509e-01
  r=1e-10       M(r)=83333.32789633  P/nとの差=-5.437e-03
  r=1e-12       M(r)=83325.92564002  P/nとの差=-7.408e+00
  r=1e-14       M(r)=83399.99309975  分母=3.597e-12
  r=1e-16       (1+r)^n - 1 = 0.0(浮動小数点上でゼロ)→ 式(4)はゼロ除算になる
  r=0           (1+r)^n - 1 = 0.0(浮動小数点上でゼロ)→ 式(4)はゼロ除算になる

想定通り、\(r=0\) の直接評価は ZeroDivisionError になります。一方 \(r\) を \(10^{-2}\) から \(10^{-10}\) まで小さくしていくと、式 (4) の値は単調に \(P/n = 83{,}333.33\) 円へ近づいていきます(差は \(2.25\times10^5 \to 1.51\times10^3 \to 1.50\times10^1 \to 1.51\times10^{-1} \to -5.44\times10^{-3}\) と桁数で縮小)。ところが \(r=10^{-12}\) まで小さくすると差が再び \(-7.41\) に拡大し、\(r=10^{-16}\) や \(r=0\) では分母 \((1+r)^n-1\) が浮動小数点上で完全にゼロになってしまいます。これは本文で述べた桁落みが実際に発生している証拠であり、「数式としては \(r\to0\) で収束するはずの量が、浮動小数点演算では途中から悪化する」という典型的な数値解析上の落とし穴です。実務では \(r\) が閾値(例えば \(10^{-8}\) )を下回った場合に式 (4) ではなく式 (10) の \(P/n\) を直接使う実装が安全です。

日数計算規約の比較

うるう年である2028年と平年である2027年で、同じ「1/15〜3/15」という日付範囲・年利5%に対して3つの日数計算規約を適用し、利息額を比較します。

import datetime


def days_30_360(d1, d2):
    """米国式(NASD)30/360規約の簡易版"""
    d1_day = min(d1.day, 30)
    d2_day = min(d2.day, 30) if d1_day == 30 else d2.day
    return (d2.year - d1.year) * 360 + (d2.month - d1.month) * 30 + (d2_day - d1_day)


def is_leap(y):
    return (y % 4 == 0 and y % 100 != 0) or (y % 400 == 0)


principal_dc = 10_000_000.0
annual_rate_dc = 0.05

for d1, d2 in [
    (datetime.date(2028, 1, 15), datetime.date(2028, 3, 15)),  # うるう年
    (datetime.date(2027, 1, 15), datetime.date(2027, 3, 15)),  # 平年
]:
    days_360 = days_30_360(d1, d2)
    days_act = (d2 - d1).days
    year_days = 366 if is_leap(d1.year) else 365

    interest_30_360 = principal_dc * annual_rate_dc * days_360 / 360
    interest_act_365 = principal_dc * annual_rate_dc * days_act / 365
    interest_act_actual = principal_dc * annual_rate_dc * days_act / year_days

    print(f"期間: {d1}{d2}{d1.year}年はうるう年: {is_leap(d1.year)})")
    print(f"  30/360の日数: {days_360}日,  実日数: {days_act}日")
    print(f"  利息(30/360)       : {interest_30_360:,.4f} 円")
    print(f"  利息(Actual/365)   : {interest_act_365:,.4f} 円")
    print(f"  利息(Actual/Actual): {interest_act_actual:,.4f} 円")

実行結果です。

期間: 2028-01-15 〜 2028-03-15 (2028年はうるう年: True)
  30/360の日数: 60日,  実日数: 60日
  利息(30/360)       : 83,333.3333 円
  利息(Actual/365)   : 82,191.7808 円
  利息(Actual/Actual): 81,967.2131 円
期間: 2027-01-15 〜 2027-03-15 (2027年はうるう年: False)
  30/360の日数: 60日,  実日数: 59日
  利息(30/360)       : 83,333.3333 円
  利息(Actual/365)   : 80,821.9178 円
  利息(Actual/Actual): 80,821.9178 円

同じ元本1,000万円・年利5%・同じ日付範囲(1/15〜3/15)にもかかわらず、規約によって利息が81,967円〜83,333円の間でばらつき、最大差は約1,366円(\(83{,}333.33 - 81{,}967.21\) )に達します。興味深いことに、うるう年2028年では30/360と実日数がどちらも60日で一致するため「日数の数え方」自体には差が出ませんが、分母(360日 vs 365日 vs 366日固定)の違いだけで金額が変わります。一方、平年2027年では実日数が59日となり、Actual/365とActual/Actualの分母がともに365日で一致するため両者の利息額が完全に一致する(80,821.9178円)ことも実測で確認できます。金融機関やローン商品によって採用する規約が異なるため、同じ「年利5%」という表示でも実際に支払う利息はこの程度ずれうる、という点は要注意です。

浮動小数点精度の比較:反復計算 vs 閉形式

日次複利を「1日ずつループで乗算する実装」と「閉形式を1回で評価する実装」で比較し、float64とfloat32での精度差を確認します。

import numpy as np

P_fp = 1_000_000.0
daily_rate = 0.05 / 365
n_days = 365 * 30  # 30年分の日次複利

# 閉形式(float64)
closed_form_64 = P_fp * (1 + daily_rate) ** n_days

# 反復ループ(float64)
balance64 = np.float64(P_fp)
for _ in range(n_days):
    balance64 = balance64 * (np.float64(1.0) + np.float64(daily_rate))

# 反復ループ(float32、単精度)
balance32 = np.float32(P_fp)
rate32 = np.float32(daily_rate)
for _ in range(n_days):
    balance32 = balance32 * (np.float32(1.0) + rate32)

print(f"n_days = {n_days}")
print(f"閉形式(float64):     {closed_form_64:.6f}")
print(f"反復ループ(float64): {balance64:.6f}")
print(f"反復ループ(float32): {float(balance32):.6f}")
print(f"差 閉形式-反復64: {closed_form_64 - balance64:.10f}")
print(f"差 閉形式-反復32: {closed_form_64 - float(balance32):.6f}")
print(f"相対誤差(float32): {(closed_form_64 - float(balance32)) / closed_form_64:.3e}")

実行結果です。

n_days = 10950
閉形式(float64):     4481228.688523
反復ループ(float64): 4481228.688523
反復ループ(float32): 4480501.000000
差 閉形式-反復64: 0.0000000289
差 閉形式-反復32: 727.688523
相対誤差(float32): 1.624e-04

float64同士(閉形式 vs 反復ループ)の差はわずか \(2.89 \times 10^{-8}\) 円で、実務上まったく問題になりません。ところが同じアルゴリズムをfloat32(単精度)で実装すると、10,950回の乗算で丸め誤差が蓄積し、閉形式との差は727.69円、相対誤差にして\(1.6\times10^{-4}\) まで拡大します。元本100万円に対して727円のずれは家計簿レベルでは無視できない金額であり、GPU計算やNumPyのデフォルトdtype設定などで意図せずfloat32が使われた場合、長期間の複利シミュレーションで気づかぬうちに誤差が蓄積するリスクを示しています。金融計算では 可能な限り閉形式の式で1回評価するか、反復計算が必要な場合はfloat64以上の精度を明示的に使うのが安全です。

連続複利への収束

複利回数 \(m\) を増やしたときに式 (5) が連続複利の式 (7) へ収束する様子も検証します。

P_ci = 1_000_000.0
r_annual = 0.05
t_years = 10

for m in [1, 2, 4, 12, 52, 365, 8760, 1_000_000]:
    A = P_ci * (1 + r_annual / m) ** (m * t_years)
    print(f"  m={m:<10d} A = {A:.6f}")

A_continuous = P_ci * np.exp(r_annual * t_years)
print(f"  連続複利 (Pe^rt)   A = {A_continuous:.6f}")
  m=1          A = 1628894.626777
  m=2          A = 1638616.440290
  m=4          A = 1643619.463487
  m=12         A = 1647009.497690
  m=52         A = 1648325.244915
  m=365        A = 1648664.813765
  m=8760       A = 1648718.918078
  m=1000000    A = 1648721.248742
  連続複利 (Pe^rt)   A = 1648721.270700

年複利(\(m=1\) )の1,628,894.63円から、複利回数を増やすごとに単調に増加し、\(m=100\) 万回(ほぼ連続複利相当)では1,648,721.25円と、理論値の連続複利式 \(Pe^{rt}=1{,}648{,}721.27\) 円に対して差が\(0.02\) 円まで縮まります。これは式 (7) で導出した極限が数値的にも正しいことを裏付けています。

図:返済スケジュールと日数計算規約の比較

上記の30年住宅ローンの例について、各回の返済額に占める元本・利息の内訳と、残高の推移をプロットします。

Amortization schedule: principal vs. interest breakdown per payment, and remaining balance over 30 years

左図は各年の返済額(月額一定)に占める元本部分(青)と利息部分(オレンジ)の内訳の推移です。ローン開始直後は利息の比率が高く、返済が進むにつれて元本の比率が増えていく「元利均等返済」特有の形状が視覚的に確認できます。右図は残高が30年かけて滑らかにゼロへ収束する様子です。

日数計算規約の違いによる利息額の差も可視化します。

Day-count convention comparison: same nominal 5% rate produces different interest amounts under 30/360, Actual/365, and Actual/Actual conventions

うるう年(2028年、青)と平年(2027年、オレンジ)のそれぞれについて、3つの規約で計算した利息額を比較しています。30/360規約はうるう年・平年どちらも同じ83,333円になる一方、Actual系の規約はうるう年で分母が366日になる分だけ利息が小さくなり、平年ではActual/365とActual/Actualが完全に一致することが一目で分かります。

特徴

  • 完全無料・登録不要 - すべてのツールをすぐに利用可能
  • スマホ対応 - モバイルでも快適に使える
  • 多言語対応 - 日本語・英語に対応
  • PWA対応 - ホーム画面に追加してアプリのように使える

まとめ

  • 元利均等返済額の公式 \(M = P\,r(1+r)^n/((1+r)^n-1)\) は、年金現価の関係式 \(P = \sum_{k=1}^n M/(1+r)^k\) を単に \(M\) について逆算したものである
  • 複利の式 \(A=P(1+r/m)^{mt}\) は、複利回数 \(m\to\infty\) の極限でネイピア数の定義 \(\lim_{x\to0}(1+x)^{1/x}=e\) を通じて連続複利の式 \(A=Pe^{rt}\) に帰着する
  • \(r=0\) ではローン返済額の公式は \(0/0\) の不定形になるが、ロピタルの定理により正しい極限は単純な \(P/n\) であり、実際に ZeroDivisionError が発生することと合わせて実測で確認した
  • \(r\) が極端に小さい領域(\(\sim 10^{-12}\) )では、数式上は収束するはずの値が浮動小数点の桁落ちにより逆に悪化することを実測で確認した。実務では閾値以下で \(P/n\) を直接使うべきである
  • 日数計算規約(30/360・Actual/365・Actual/Actual)の違いは、同じ年利・同じ日付範囲でも利息額に実測で最大約1,366円の差を生む
  • 日次複利のシミュレーションをfloat32で反復計算すると、閉形式との差が727円(相対誤差\(1.6\times10^{-4}\) )まで蓄積することを実測で確認した。金融計算では閉形式の直接評価かfloat64以上の精度が推奨される

CalcBox をぜひご活用ください。

関連ツール: DevToolBox - 開発者向けツール集 | ポモドーロタイマー

参考文献

  • Fabozzi, F. J. (2012). Bond Markets, Analysis, and Strategies (8th ed.). Pearson. (年金現価・元利均等返済額の標準的な導出)
  • ISDA (2006). 2006 ISDA Definitions, Section 4.16 (Day Count Fraction). (30/360, Actual/365, Actual/Actualなど日数計算規約の業界標準定義)
  • Goldberg, D. (1991). “What Every Computer Scientist Should Know About Floating-Point Arithmetic.” ACM Computing Surveys, 23(1), 5-48. (浮動小数点の桁落ち・精度に関する古典的解説)