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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kosuke hino
July 30, 2024
80
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
誤差を知ろう
kosuke hino
July 30, 2024
More Decks by kosuke hino
See All by kosuke hino
NotebookLMと散歩
kosukehino
0
32
リアルタイム通信を知る
kosukehino
0
110
hinoはhonoを知りたい
kosukehino
0
94
ポモドーロテクニック
kosukehino
0
47
AtCoder Heuristic Contestを知っているか?
kosukehino
0
120
AIでスライド爆速生成!
kosukehino
0
150
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
How to Ace a Technical Interview
jacobian
281
24k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.6k
Mind Mapping
helmedeiros
PRO
1
280
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
63
55k
Leo the Paperboy
mayatellez
8
1.9k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Transcript
誤差を知ろう 株式会社 Inner Resource 檜野 浩輔
初めに • 最近タスクで⼩数点の計算を⾒る機会があって誤差を気にしたのと • 前回のLT会で2進数の話題が出て、コンピューターの誤差は2進数が 関係するという事で、誤差について話していきます! 2
丸め誤差とは? 10進数から2進数に変換した結果⽣じる誤差の事 3
コンピューターと2進数 • そもそもコンピューターは2進数でデータを持ちます。 • つまり我々がコード上は10進数で書いたとしても、コンピューター の処理では2進数に変換されて計算されています。 4
整数と2進数 • 10進数を2進数で表すときは、2!の⾜し合わせによって表現します • Ex) 123 "# = 1111011(%) =
1 & 2' + 1 & 2( + 1 & 2) + 1 & 2* + 0 & 2% + 1 & 2" + 1 & 2# = 64 + 32 + 26 + 8 + 0 + 2 + 1 • 全ての整数は2進数で表現が可能です • つまり整数の2進数の変換では、誤差は出ないという事です 5
⼩数と2進数 • ⼩数も同様に2!の⾜し合わせによって表現します • ⼩数部分はn=-1, -2, -3...となります。 • つまり以下ような数字の⾜し合わせです 2+"
= 1 2" = 0.5 2+% = 1 2% = 0.25 2+* = 1 2* = 0.125 6
⼩数と2進数 • なんとなく察しがつくかと思いますが、⼩数は2進数で表現出来た り、出来なかったりします。 • Ex)0.75 "# = 2+" +
2+% = 0.11(%) • 0.1 "# = 2+) + 2+(+. . . = 0.000110011001100110011 …(%) • コンピューターは2進数の上限の桁数が決まっています • なので無限に続いてしまった場合は、途中で切ることになります。 • その結果、10進数から2進数に変換すると、元の10進数の値とは別 の値で2進数として表現する事なって誤差が⽣じる • 0.1を32桁にして表した時内部的にどうなるかの図 7
丸め誤差の対処⽅法 • BigDecimalを使⽤します • 簡単に説明すると⼩数点の計算を、整数を⽤いて計算出来るように 内部でよしなにやってくれます(今回は時間の都合で端折る) • デメリットとして普通の計算と⽐べて、メモリ使⽤量が増えて、計 算のパフォーマンスも遅くなってしまいます •
なのでどこでも使って良い訳ではなく、限定的に使う必要がありま す。 8
⼊⼒データによる誤差とは? • 10進数の時点で割り切れない " * や" ' を計算の中で使う際に出る誤差 • Ex)
以下のような計算になる時 • 理系的な対処法としては、そのまま計算してはいけません。分⼦は 分⼦で、分⺟は分⺟で計算をして、最後に割り算を⾏って誤差を最 ⼩にする • つまり計算の順番を⼯夫して、割り算を⾏うのは最終的な回答を出 すときだけで、それまでは分数で計算をしていくという事 9
最後に • 今回は触れなかったですが、他にも誤差は、打ち切り誤差、桁落ち 誤差といったものもあります。 • ⾔語によっては桁落ち誤差の挙動だったり、数値を基にした真偽値 の挙動だったりが異なったりします。数値を扱う際には注意をしま しょう!! • 今回紹介したような対処⽅法を必ず使わないといけないというわけ
ではないです。計算式を使って何かを表現する際には、⾔葉のまま 計算していいのか、⼯夫をする必要があるのか⾒極めていきましょ う!! 10