Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
丸め誤差発生の仕組みと向き合い方
Search
えび
October 21, 2024
0
96
丸め誤差 発生の仕組みと向き合い方
https://xvi-pea.hatenablog.com/entry/2024/10/19/211254
えび
October 21, 2024
Tweet
Share
More Decks by えび
See All by えび
巨大リポジトリはパーシャルクローンしようね。
ebibibibibi
0
1
バブルソートでPHPに入門する
ebibibibibi
0
110
影響範囲調査をする技術
ebibibibibi
0
64
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
82
9.1k
Site-Speed That Sticks
csswizardry
10
660
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
A Modern Web Designer's Workflow
chriscoyier
694
190k
Adopting Sorbet at Scale
ufuk
77
9.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
Statistics for Hackers
jakevdp
799
220k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Transcript
丸め誤差 発⽣の仕組みと向き合い⽅ =千歳ゆるい勉強会vol.4=
⾃⼰紹介 • えび🦐 • エンジニア2年⽣ • Swiftが好き…最近触らせてもらえていない… 最近の関⼼ • TDD
: Swiftで⾊々いじっています。まだ腹落ちしていない。 • コンピュータはなぜ動いているのか
•以下の計算を試してください:
0.3 ?
答え: 0.30000000000000004
これが丸め誤差
今⽇は、丸め誤差発⽣の仕 組みと 向き合い⽅について お話しします。
⽬次 •浮動⼩数点数とはなにか •基数変換の⽅法をおさらい •浮動⼩数点数の優位性 •丸め誤差と付き合っていく •まとめ
Double = 浮動⼩数点数型の⼀種
浮動⼩数点数とは
浮動⼩数点数とは: 10進数の実数を、有限桁の2進数 の近似値で表現する⽅法
基数変換の⽅法をおさらい
整数部:整数を2で割り、余りを下から上へ並べる
⼩数部:⼩数部分に2を掛け、積の整数部分 を順に取り出す
0.1を⼆進数にする:
循環している…?
浮動⼩数点数: 10進数の実数を、有限桁の2進数 の近似値で表現する⽅法
丸め誤差は、⼩数を有限桁の⼆進 数で表現できない時に発⽣する
浮動⼩数点数の優位性
浮動⼩数点数の優位性: 効率的なメモリ利⽤と ⾼速な演算が可能
ベンチマークを取ってみる
None
•Double: 0.00000003327274322509766秒 •Decimal: 0.000000044722795486450195秒 確かに、 Doubleのほうが(若⼲)早い
丸め誤差と付き合う
丸め誤差を回避する⽅法: •整数で計算した後、10で割る •Decimalを使⽤する
整数で計算した後、10で割る: •10進数の整数を2進数に変換する際は常に正 確に基数変換できる •なぜなら、任意の値を2の累乗の組み合わせ として表現するだけで済むから
(補⾜) 2の累乗:
Decimalを使⽤する: •10進数で計算すれば、何も問題ないよね!!
丸め誤差を許容する: •数値の正確さが必須ではない時は、許容する
まとめ: •丸め誤差は、10進数を2進数で表現する際に 発⽣する計算誤差です。 •浮動⼩数点数は、誤差を伴うものの、⾼速で メモリ効率が良いため、広く使⽤されていま す。 •丸め誤差の回避⽅法として、整数で計算後に 10で割る⽅法や、Decimal型を使⽤する⼿段 があります。
None
②以降で話したいこと •なぜ浮動⼩数点数は速いのか •丸め誤差を許容する 内部の動き •IEEE 754標準について