目次 (contents)

3.3

Hand calculation

(2004-4-25)

(a)

 歳  確率       
  A       p     Ap
------------------
 90  0.07  6.30
 91  0.08  7.28
 92  0.09  8.28
 93  0.10  9.30
 94  0.10  9.40
 95  0.10  9.50
 96  0.10  9.60
 97  0.10  9.70
 98  0.10  9.80
 99  0.07  6.93
100  0.05  5.00
101  0.04  4.04
------------------
 合計 1.00 95.13

∴平均余命は、95.13-90=5.13(年)

(b)

(2004-4-25)
支払年額A=10000($)、年金利r=0.08、期間n=5.13(年)、年金の現在価値をPとすると、Pは次式を満たす。
P=(A / r)(1 - 1 / (1 + r)n)
 =(10000/0.08)(1-1/1.085.13)
∴P=40,774($)

(added on 2015-04-04)
上のPの算定は、問題の「平均法を使え」を考慮していない。 平均法の意味が分からないため、次の解釈で問題を解くことにする。

期間5年の現在価値PV(5)と期間6年の現在価値PV(6)を算定し、期間5.13年の現在価値PV(5.13)を次式で求める。

PV(5.13) = (1-0.13)PV(5) + 0.13PV(6)
PV(5) = 10000 / 0.08(1 - 1/(1 + 0.08)5) = 39927
PV(6) = 10000 / 0.08(1 - 1/(1 + 0.08)6) = 46229
PV(5.13) = 0.87×39927 + 0.13×46229 = 34736 + 6010 = 40746

ただし、計算は、小数点以下を四捨五入した。

Python

code

(2015-04-04, 2019-09-17, 2025-02-01.)


# 3.3.py
# 14:23 2015-04-04
# 2024-12-07 revise
  
# a,  age
# df, discount factor
# p , probability of becoming dead
# pv, present value of x
# r,  interest rate
# x,  cash flow
  
# input
r = 0.08
istart =  90
iend   = 101
n = iend - istart
a = [90,   91,   92,   93,   94,   95,   96,   97,   98,   99,   100,  101 ]
x = [0,    10e3, 10e3, 10e3, 10e3, 10e3, 10e3, 10e3, 10e3, 10e3, 10e3, 10e3]
p = [0.07, 0.08, 0.09, 0.1,  0.1,  0.1,  0.1,  0.1,  0.1,  0.07, 0.05, 0.04]
pp= [1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0   ]
  
# calculate
for i in range(len(a)):
  if i == 0:
    pp[i] = 1
  else:
    pp[i] = pp[i - 1] - p[i - 1]
df = [1 / (1 + r) ** i for i in range(len(a))]
pv = [x1 * x2 * x3 for x1, x2, x3 in zip(pp, x, df)]
  
# output
print("3.3.py")
fmt1 = 7 * "{:>10}"
print(fmt1.format("i", "age", "p", "pp", "annuity", "df", "pv"))
print(70 * "-")
fmt2="{:10d}{:10d}{:10.2f}{:10.2f}{:10.0f}{:10.3f}{:10.0f}"
for x1, x2, x3, x4, x5, x6, x7 in zip(range(len(a)), a, p, pp, x, df, pv):
  print(fmt2.format(x1, x2, x3, x4, x5, x6, x7))
print(70 * "-")
print("{:>60}{:10.0f}".format("sum of pv=", sum(pv)))
# end

Fortran

2014-08-15, 2024-10-30.

年金の期待現在価値を計算するFortranプログラムを次に示す。

3.3.f90

JavaScript

2024-10-29 JavaScriptのコードを次のリンクに示す。node.jsで動作確認済。

3.3.js

Gauche

2024-10-29 Gaucheのコードを次のリンクに示す。

3.3.scm

Julia

2024-10-29 Juliaのコードを次のリンクに示す。

3.3.jl

history

revised on 2011-10-29, 2014-08-15, 2015-04-04, 2016-10-10.
2011-10-29 「割引率」を「割引係数」に訂正した。
2014-08-15 changed awk to Fortarn.
2015-04-04 Python code added.
2016-10-10 Fortran code linked.
2019-09-17 Python code revised.
2024-10-29 add a JavaScript code, a Gauche code and a Julia code.
2024-10-30 revise a Fortran code.
2025-02-01 open revised 3.3.py.