元本 7,200,000円(点線)に対し、評価額は 12,331,010円(実線)。差の5,131,010円が複利の運用益。
序盤は点線と実線がほとんど重なっている。差が開き始めるのは後半で、しかもいったん開くと一気に加速する。積立を早く始めた方がいいと言われるのは、この後半の伸びを何年ぶんも余計に受け取れるからだ。
単利・複利の数式
単利は元本にのみ利息がつく(元本×利率×年数)。複利は前年までの利息にも次の利息がつくため、元本×(1+利率)^年数という指数関数になる。年数が長いほど複利の効果は加速し、この差が「積立をなるべく早く始めるべき」という助言の数学的な根拠になっている。
単利(点線)
200万円
複利(実線)
265万円
20年後の差は65万円。利率×年数が同じでも、利息が利息を生む複利は指数関数として離れていきます。
点線の単利はまっすぐ伸びるだけ。実線の複利は、利息がまた利息を生むぶんだけ上へ反っていく。同じ利率でも、この「利息にも利息」というひと手間があるかどうかで、最終額は指数的に離れていく。
近似の誤差は+0.10年(+0.9%)。年利8%前後で最も一致し、極端に高い/低い利率ほどズレます。「資産が2倍になる年数」を暗算する定番テクニックの中身です。
「72÷利率」で資産が2倍になる年数がざっと出るのは、複利の式を対数で解いた ln2÷ln(1+利率) の良い近似だから。年利8%前後で最もよく一致する。
ローン返済(元利均等・元金均等)の計算ロジック
元利均等返済は毎月の返済額が一定になる方式で、返済初期は利息の割合が高く、後半になるほど元金の割合が増える。元金均等返済は毎月の元金部分を一定にするため、返済額は初期が高く徐々に減っていく。総支払額は元金均等の方が少なくなるが、初期の負担は元利均等より重い。
元利均等(実線)
毎月 10.4万円 で一定 / 総支払 3,727万円
元金均等(点線)
初月 12.1万円 から漸減 / 総支払 3,677万円
総支払額の差:50万円(元金均等の方が少ないが、初期の毎月負担は重い)
水平な実線が元利均等、右肩下がりの点線が元金均等。金利や期間を上げるほど、2方式の総支払額の差は広がっていく。毎月を平らにするか、総額を抑えるか。どちらを取るかで、最終的に払う金額そのものが変わる。
毎月返済額は10.4万円で一定なのに、内訳は序盤ほど利息の割合が高い。総利息は727万円。
毎月の返済額は一定なのに、その内訳は序盤ほど利息が厚い。繰り上げ返済が早いほど効くのはこのためで、減らせる元金がまだ多く残っているうちなら、後々の利息をまとめて削り落とせる。
為替・手数料を含む実務計算の注意点
為替を絡めた計算では「両替時の手数料(スプレッド)」を見落としやすい。表示レートそのままで計算すると、実際の受取額と数円〜数%のズレが生じる。積立計算でも、信託報酬のような継続コストを年率から差し引かずに試算すると、将来の資産額を過大に見積もることになる。
円→ドル
$660.07
ドル→円
98,020円
目減り
−1,980円
仲値150円/ドルは往復で変わらないのに、往復で1.98%目減りします(片道1.00%×2が効く)。表示レートのまま計算すると、この手数料を見落とします。
仲値は往復で変わらないのに、片道ごとにスプレッド分だけ不利なレートが適用されるため、円→ドル→円で戻すと必ず目減りする。表示レートのまま計算すると、この手数料がまるごと抜け落ちる。
コスト無視(点線)
2,161万円
コスト控除後(実線)
1,603万円
年1.00%のコストは、30年で558万円もの差になります。年率から引かずに試算すると、将来額をこれだけ過大評価します。
年1%のコストは一見わずかだが、複利で回る年数が長いほど差は広がり続ける。運用益に毎年かかり続ける目減りは、時間を味方につけるほど逆に重くのしかかってくる。コストを引かずに試算すれば、将来額はそのぶん過大に見える。
浮動小数点誤差への対処
JavaScriptの数値は浮動小数点であるため、0.1 + 0.2 !== 0.3のような誤差が生じる。金額計算では最小単位(円やセント)の整数で計算してから最後に小数点に戻す、または誤差許容範囲を持たせた比較・丸め処理を必ず入れる必要がある。
float のまま 0.1 を 3 回加算
0.30000000000000004
整数化(×10)して加算 → 最後に割り戻す
0.3
誤差は5.551e-17。1回では見えない誤差も、加算を重ねるほど蓄積します。金額計算で整数化が必須になる理由です。
0.1を3回足すだけで、もう答えは0.3ちょうどにならない。積立や返済のような「同じ計算の繰り返し」でこの誤差が蓄積するからこそ、金額は整数の最小単位で計算する。
正しい合計(丸めなし):1,298,159円
切り捨ては1件あたり平均 -0.50円ぶん下振れ。件数が増えるほど、この小さなズレが積み上がります。
1件だけなら端数の丸めは誤差の範囲。ところが件数を増やすと、切り捨ては毎回わずかに下振れするぶんが片側にたまり続け、バーが伸びていく。四捨五入はプラスとマイナスがほぼ相殺してゼロ付近をふらつくだけ。同じ利息でも、どの丸めを選ぶかで合計が体系的にズレる。だから丸め方式は実装任せにせず、仕様で固定しておく。
元本100万円・年利6%・20年。いま12回/年で最終額331万円、連続複利の天井まであと9,912円(91.2%到達)。分割を上げてもertの破線は超えられません。
分割数を上げていくと、最終額は最初こそぐんと伸びるのに、毎月あたりでもう破線の天井にほぼ貼りつく。年1回と毎日の間ですら差はごくわずかで、いくら細かく回しても連続複利 e^(rt) を超えることはない。「複利」を実装するとき、どの間隔で回すかは決めておくべきパラメータだが、頻度を上げれば上げるほど得をするわけではない、というのがこの頭打ちの意味。