丸め誤差発生の仕組みと向き合い方
by
えび
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
丸め誤差 発⽣の仕組みと向き合い⽅ =千歳ゆるい勉強会vol.4=
Slide 2
Slide 2 text
⾃⼰紹介 • えび🦐 • エンジニア2年⽣ • Swiftが好き…最近触らせてもらえていない… 最近の関⼼ • TDD : Swiftで⾊々いじっています。まだ腹落ちしていない。 • コンピュータはなぜ動いているのか
Slide 3
Slide 3 text
•以下の計算を試してください:
Slide 4
Slide 4 text
0.3 ?
Slide 5
Slide 5 text
答え: 0.30000000000000004
Slide 6
Slide 6 text
これが丸め誤差
Slide 7
Slide 7 text
今⽇は、丸め誤差発⽣の仕 組みと 向き合い⽅について お話しします。
Slide 8
Slide 8 text
⽬次 •浮動⼩数点数とはなにか •基数変換の⽅法をおさらい •浮動⼩数点数の優位性 •丸め誤差と付き合っていく •まとめ
Slide 9
Slide 9 text
Double = 浮動⼩数点数型の⼀種
Slide 10
Slide 10 text
浮動⼩数点数とは
Slide 11
Slide 11 text
浮動⼩数点数とは: 10進数の実数を、有限桁の2進数 の近似値で表現する⽅法
Slide 12
Slide 12 text
基数変換の⽅法をおさらい
Slide 13
Slide 13 text
整数部:整数を2で割り、余りを下から上へ並べる
Slide 14
Slide 14 text
⼩数部:⼩数部分に2を掛け、積の整数部分 を順に取り出す
Slide 15
Slide 15 text
0.1を⼆進数にする:
Slide 16
Slide 16 text
循環している…?
Slide 17
Slide 17 text
浮動⼩数点数: 10進数の実数を、有限桁の2進数 の近似値で表現する⽅法
Slide 18
Slide 18 text
丸め誤差は、⼩数を有限桁の⼆進 数で表現できない時に発⽣する
Slide 19
Slide 19 text
浮動⼩数点数の優位性
Slide 20
Slide 20 text
浮動⼩数点数の優位性: 効率的なメモリ利⽤と ⾼速な演算が可能
Slide 21
Slide 21 text
ベンチマークを取ってみる
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
•Double: 0.00000003327274322509766秒 •Decimal: 0.000000044722795486450195秒 確かに、 Doubleのほうが(若⼲)早い
Slide 24
Slide 24 text
丸め誤差と付き合う
Slide 25
Slide 25 text
丸め誤差を回避する⽅法: •整数で計算した後、10で割る •Decimalを使⽤する
Slide 26
Slide 26 text
整数で計算した後、10で割る: •10進数の整数を2進数に変換する際は常に正 確に基数変換できる •なぜなら、任意の値を2の累乗の組み合わせ として表現するだけで済むから
Slide 27
Slide 27 text
(補⾜) 2の累乗:
Slide 28
Slide 28 text
Decimalを使⽤する: •10進数で計算すれば、何も問題ないよね!!
Slide 29
Slide 29 text
丸め誤差を許容する: •数値の正確さが必須ではない時は、許容する
Slide 30
Slide 30 text
まとめ: •丸め誤差は、10進数を2進数で表現する際に 発⽣する計算誤差です。 •浮動⼩数点数は、誤差を伴うものの、⾼速で メモリ効率が良いため、広く使⽤されていま す。 •丸め誤差の回避⽅法として、整数で計算後に 10で割る⽅法や、Decimal型を使⽤する⼿段 があります。
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
②以降で話したいこと •なぜ浮動⼩数点数は速いのか •丸め誤差を許容する 内部の動き •IEEE 754標準について