Upgrade to Pro — share decks privately, control downloads, hide ads and more …

指数の裏側

けんご
February 05, 2016

 指数の裏側

けんご

February 05, 2016
Tweet

More Decks by けんご

Other Decks in Programming

Transcript

  1. 数学関数 • とか は簡単に実装できそう • とか も簡単に実装できそう • とか とか

    は? • とか は? 24 79 e4 e10 20.5 31.7492 e 0.111 log 4 log 8 . 552
  2. 掛け算を足し算 : 例 • 2756 x 7547 = ? 0

    . 2756 = sin 16 , 0 . 7547 = cos 41 ↵ = 16 , = 41
  3. 掛け算を足し算 : 例 • 2756 x 7547 = ? 0

    . 2756 = sin 16 , 0 . 7547 = cos 41 ↵ = 16 , = 41 • 積和の公式に代入する sin 16 cos 41 = 1 2 (sin(16 + 41 ) + sin(16 41 )) = 1 2 (0.8387 0.4226) = 0.2080 = 1 2 (sin 57 + sin( 25 ))
  4. 掛け算を足し算 : 例 • 0.2756 x 0.7547 = 0.2080 なので

    • 2756 x 7547 ≒ 20800000 • 実際は... • 2756 x 7547 = 20799532 • だいたいあってる 誤差: 468
  5. 16 · 32 = 24 · 25 = 24+5 =

    29 = 512 • 発想の雛形はこんな指数法則から。 2n2m = 2n+m 0 1 2 3 4 5 6 7 8 9 10 1 2 4 8 16 32 64 128 256 512 1024 x 2x ← 掛け算を足し算で計算した • 2を底にしたこんな表を使うと 対数の発見
  6. 16 · 32 = 24 · 25 = 24+5 =

    29 = 512 • 発想の雛形はこんな指数法則から。 2n2m = 2n+m 0 1 2 3 4 5 6 7 8 9 10 1 2 4 8 16 32 64 128 256 512 1024 x 2x 25 · 59 =? ← 掛け算を足し算で計算した ← じゃこれは?表の中には25も59もでてこない • 2を底にしたこんな表を使うと 対数の発見
  7. • 2を底に使うと全ての数に対応できない • そこで... •     を底にすればいいんじゃ? 1 1 107

    0 1 2 3 4 1 0.9999999 0.9999998 0.9999997 0.9999996 x ✓ 1 1 107 ◆ x 対数の発見
  8. • 対数の発見 • つまり を底とする ✓ 1 1 107 ◆107

    • 指数部 は少数になる x 107 ✓ 1 1 107 ◆107 ! x 107 0 1 2 3 4 0 0.0000001 0.0000002 0.0000003 0.0000004 0 … … … … x x 107 ✓ 1 1 107 ◆107 ! x 107
  9. • 微分の定義 対数関数と指数関数 lim h!0 f ( x + h

    ) f ( x ) h x + h x f ( x ) f ( x + h ) h f ( x + h ) f ( x )
  10. • logの微分 対数関数と指数関数 lim h!0 loga(x + h) loga(x) h

    = lim h!0 1 h loga ✓ x + h x ◆ = lim h!0 1 h loga ✓ 1 + h x ◆
  11. 対数関数と指数関数 lim h!0 loga(x + h) loga(x) h • logの微分

    = lim h!0 1 h loga ✓ x + h x ◆ = lim h!0 1 h loga ✓ 1 + h x ◆ = lim n!1 n x loga ✓ 1 + 1 n ◆ h x = 1 n と置く
  12. 対数関数と指数関数 lim h!0 loga(x + h) loga(x) h • logの微分

    = lim h!0 1 h loga ✓ x + h x ◆ = lim h!0 1 h loga ✓ 1 + h x ◆ = lim n!1 n x loga ✓ 1 + 1 n ◆ h x = 1 n と置く = 1 x lim n!1 loga ✓ 1 + 1 n ◆n = 1 x loga lim n!1 ✓ 1 + 1 n ◆n
  13. 対数関数と指数関数 lim h!0 loga(x + h) loga(x) h • logの微分

    = lim n!1 n x loga ✓ 1 + 1 n ◆ h x = 1 n と置く = 1 x lim n!1 loga ✓ 1 + 1 n ◆n = 1 x loga lim n!1 ✓ 1 + 1 n ◆n = lim h!0 1 h loga ✓ 1 + h x ◆ = lim h!0 1 h loga ✓ x + h x ◆ e
  14. • 対数関数と指数関数 lim n !1 ⇣ 1 + x n

    ⌘ n = ex ✓ 1 1 107 ◆107 ⇡ e 1 lim n!1 ✓ 1 + 1 n ◆n = e • • ← ネイピアが使った底
  15. 指数関数の実装 • を展開してみる ex ex = lim n !1 ⇣

    1 + x n ⌘ n = lim n!1 ⇣ 1 + x n ⌘ ⇣ 1 + x n ⌘ ⇣ 1 + x n ⌘ · · · = lim n!1 1n + nC11n 1 ⇣ x n ⌘1 + nC21n 2 ⇣ x n ⌘2 · · · = lim n!1 1 + nC1 1 n x + nC2 1 n 2 x 2 · · ·
  16. • を展開してみる ex ex = lim n !1 ⇣ 1

    + x n ⌘ n = lim n!1 ⇣ 1 + x n ⌘ ⇣ 1 + x n ⌘ ⇣ 1 + x n ⌘ · · · = lim n!1 1n + nC11n 1 ⇣ x n ⌘1 + nC21n 2 ⇣ x n ⌘2 · · · = lim n!1 1 + nC1 1 n x + nC2 1 n 2 x 2 · · · = 1 + x 1! + x 2 2! · · · ✓ lim n!1 nCk 1 nk = 1 k! ◆ 指数関数の実装
  17. • • の周りでテイラー展開した結果と同じ • テイラー展開 x = 0 ex =

    1 + x 1! + x 2 2! + · · · f ( x ) = f ( a ) + f 0( a ) 1! ( x a ) + f 00( a ) 2! ( x a )2 + · · · 指数関数の実装 • この形であれば実装できそう • もちろん無限回計算は不可能。途中で打ち切る
  18. • ただし の範囲でしか成り立たない • 使えない・・・? • もテイラー展開すれば実装できそう • ただし 周りではテイラー展開できない

    • 代わりに を 周りで展開する 対数関数の実装 x = 0 log x log(x + 1) x = 0 log(x + 1) = x x 2 2 + x 3 3 x 4 4 + · · · 1 < x < 1
  19. • は浮動小数点数の表現 • 任意の実数 における と を求めるのは簡単 • 例えば なら

    • という風に分解する • と分解できる 対数関数の実装 log x = log(c · 2 n ) = log c + n log 2 x = c · 2n (0 < c < 2) 予め計算して定数として保持しておける log 2 = 0 . 6931 · · · なのでテイラー展開可能 0 < c < 2 c · 2n x c n x = 10 c = 1.25, n = 3
  20. • log(x) と置いて 数学関数まとめ • exp(x) ex = 1 +

    x 1! + x 2 2! + · · · log(x + 1) = x x 2 2 + x 3 3 x 4 4 + · · · x = c · 2n を使う を使う • pow(a, b) ab = eb log a を使う log 2 = 0 . 6931 · · · と