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. 指数の裏側
    プログラマのための数学勉強会@福岡
    2016.02.05
    @tkengo

    View Slide

  2. 立石 賢吾
    Twitter : @tkengo
    RubyとJavaScriptが好きです。でも、トトロの方が
    もっと好きです。
    github : @tkengo

    View Slide

  3. 数学関数
    •今日は3つの数学関数の話をします
    •pow(a, b)
    •exp(x)
    •log(x)
    ab
    ex
    log x (loge x)

    View Slide

  4. 数学関数
    •今日は3つの数学関数の話をします
    •pow(a, b)
    •exp(x)
    •log(x)
    •実装したことある人?
    ab
    ex
    log x (loge x)

    View Slide

  5. 数学関数
    • とか は簡単に実装できそう
    • とか も簡単に実装できそう
    24 79
    e4 e10

    View Slide

  6. 数学関数
    • とか は簡単に実装できそう
    • とか も簡単に実装できそう
    • とか とか は?
    • とか は?
    24 79
    e4 e10
    20.5 31.7492 e 0.111
    log 4 log 8
    .
    552

    View Slide

  7. 数学関数
    •ということで今日は実装の話をします
    •そのために少し歴史の話をします
    •始まりは対数から...

    View Slide

  8. 対数

    View Slide

  9. 対数
    • 指数関数の逆関数


    • 16世紀頃にその概念が発見された
    y = ax
    x = loga y

    View Slide

  10. 時代背景(16〜17世紀)
    • 指数関数の概念はなかった
    • 科学、特に天文学が発展する
    • 複雑で桁数の多い数値計算が必要
    • パソコンとかスマホとか無い
    • 人々は紙と鉛筆を使って地道に計算していた

    View Slide

  11. 2756 7547 = ?
    x

    View Slide

  12. もっと簡単に計算したい...

    View Slide

  13. 掛け算を足し算にできれば
    簡単なのに...

    View Slide

  14. 掛け算を足し算
    • 当時、高精度な三角関数の表は既にあった
    • その表と、三角関数の積和の公式を使ってみる
    sin

    cos =
    1
    2
    (sin(

    + ) + sin(

    ))

    View Slide

  15. 掛け算を足し算 : 例
    • 2756 x 7547 = ?

    View Slide

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

    View Slide

  17. 掛け算を足し算 : 例
    • 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 ))

    View Slide

  18. 掛け算を足し算 : 例
    • 0.2756 x 0.7547 = 0.2080 なので
    • 2756 x 7547 ≒ 20800000

    View Slide

  19. 掛け算を足し算 : 例
    • 0.2756 x 0.7547 = 0.2080 なので
    • 2756 x 7547 ≒ 20800000
    • 実際は...
    • 2756 x 7547 = 20799532
    • だいたいあってる
    誤差: 468

    View Slide

  20. 対数の発見
    • ジョン・ネイピア
    • 対数の発見者として語り継がれている
    • 三角関数を使う方法を見て考えてみた

    View Slide

  21. 対数の発見
    もっと直感的な方法で
    掛け算を足し算にしたる
    • ジョン・ネイピア

    View Slide

  22. 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を底にしたこんな表を使うと
    対数の発見

    View Slide

  23. 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を底にしたこんな表を使うと
    対数の発見

    View Slide

  24. • 2を底に使うと全ての数に対応できない
    • そこで...
    •     を底にすればいいんじゃ?
    1
    1
    107
    0 1 2 3 4
    1 0.9999999 0.9999998 0.9999997 0.9999996
    x

    1
    1
    107

    x
    対数の発見

    View Slide

  25. • もっと高い精度が欲しい
    • そこでもっと考えた...
    • 指数を少数にすればいいんじゃ?
    (つまりもっと微小な幅の表が欲しい)

    1
    1
    107

    x
    =

    1
    1
    107
    ◆107
    !
    x
    107
    対数の発見

    View Slide


  26. 対数の発見
    • つまり を底とする

    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

    View Slide

  27. の発見
    e

    View Slide

  28. 対数関数と指数関数
    • レオンハルト・オイラー
    • ネイピアの時代から約2世紀後
    • 指数関数とその逆関数である対数関数を定義

    y = ax ()
    x = loga y

    View Slide

  29. 対数関数と指数関数
    • レオンハルト・オイラー
    logを微分したる

    View Slide

  30. • 微分の定義
    対数関数と指数関数
    lim
    h!0
    f
    (
    x
    +
    h
    )
    f
    (
    x
    )
    h
    x
    +
    h
    x
    f
    (
    x
    )
    f
    (
    x
    +
    h
    )
    h
    f
    (
    x
    +
    h
    )
    f
    (
    x
    )

    View Slide

  31. • 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

    View Slide

  32. 対数関数と指数関数
    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
    と置く

    View Slide

  33. 対数関数と指数関数
    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

    View Slide

  34. 対数関数と指数関数
    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

    View Slide


  35. 対数関数と指数関数
    lim
    n
    !1

    1 + x
    n

    n =
    ex

    1
    1
    107
    ◆107
    ⇡ e 1
    lim
    n!1

    1 +
    1
    n
    ◆n
    = e

    • ← ネイピアが使った底

    View Slide

  36. 数学関数の実装

    View Slide

  37. 指数関数の実装
    • を展開してみる
    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 · · ·

    View Slide

  38. • を展開してみる
    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!

    指数関数の実装

    View Slide


  39. • の周りでテイラー展開した結果と同じ
    • テイラー展開
    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 + · · ·
    指数関数の実装
    • この形であれば実装できそう
    • もちろん無限回計算は不可能。途中で打ち切る

    View Slide

  40. • ただし の範囲でしか成り立たない
    • 使えない・・・?
    • もテイラー展開すれば実装できそう
    • ただし 周りではテイラー展開できない
    • 代わりに を 周りで展開する
    対数関数の実装
    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

    View Slide

  41. • は浮動小数点数の表現
    • 任意の実数 における と を求めるのは簡単
    • 例えば なら
    • という風に分解する
    • と分解できる
    対数関数の実装
    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

    View Slide

  42. べき乗関数の実装
    • もテイラー展開?
    • 実は と表せるので
    • 既に と は実装済みなので計算可能
    ab
    ex
    log x
    ab = eb
    log
    a

    View Slide

  43. • 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
    · · · と

    View Slide

  44. おわり

    View Slide