丸め誤差発生の仕組みと向き合い方
by
えび
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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標準について