Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
IEEE754を完全に理解した
Search
Kaneko Takeshi
December 24, 2021
Programming
87
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
IEEE754を完全に理解した
PIZZA_JP#47
Kaneko Takeshi
December 24, 2021
More Decks by Kaneko Takeshi
See All by Kaneko Takeshi
オープンソースライセンスについて勉強する定期
tkckaneko
0
46
Eye Tracking on the Browser
tkckaneko
0
99
CSSのトレンドをみんなで見よう -2021年-
tkckaneko
0
100
多分これが一番早いと思います
tkckaneko
0
31
暗黒面の話
tkckaneko
0
31
CSR / SSR / SSG / JAMstack
tkckaneko
0
79
BOLT
tkckaneko
0
41
CSS Logical Properties and Values
tkckaneko
0
60
Visual Effect Graphをさわってみた
tkckaneko
0
41
Other Decks in Programming
See All in Programming
XHTMLが残したもの
yosuke_furukawa
PRO
2
760
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
150
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
380
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
110
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
780
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
370
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
320
高専キャリア LT 発表内容
crysta1221
6
5.7k
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
240
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
180
Deep dive into the select statement (GopherCon UK)
jespino
0
180
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
230
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
310
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
930
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
Transcript
IEEE 754を完全に理解した
JavaScriptの小数計算 消費税の計算をしようとする 価格:100円 消費税:8% 108円ですよね?
JavaScriptの小数計算 消費税の計算をしようとするけど、消費税が上がりました 価格:100円 消費税:10% 110.00000000000001円???
JavaScriptの数値:Number型 JavaScript の Number 型は IEEE 754 の倍精度 64ビットバイナリ形式であ り、
Java や C# の double のようなものです。これは小数点以下の数値を表 すことができることを意味しますが、格納できる値にはいくつかの制限があ ります。 Number は小数点以下約 17 桁の精度しか保持できません。演算 は丸め誤差の影響を受けます。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number
小数を扱うときに使うライブラリ こんなライブラリを使うのがデファクトスタンダードになっている - big.js - 超軽量 - bignumber.js - big.jsより多機能
- decimal.js - bignumber.jsと同じ機能 - 精度は小数点以下ではなく有効数字で指定
IEEE 754を勉強する 浮動小数点方式においては、固定長の仮数部と固定長の指数部の2つの 部分の組み合わせによって、数値を表現する。 符号(1 ビット) | 指数部(11 ビット) |
仮数部(52 ビット) https://ja.wikipedia.org/wiki/浮動小数点数
IEEE 754を勉強する 符号: 正の値なら 0、 負の値なら 1。 指数: 実際の値に 1023
を加えた値を使う。11 桁なので2048まで表現でき るけど、指数部が負の時があるから-1023~1024 を表現して 1023 を足す ようにしてる。 仮数: 指数を調整して 1.◯◯ のように 1.で始まるように小数点を移動す る。先頭の 1 は絶対なので無視する。 https://ja.wikipedia.org/wiki/浮動小数点数
IEEE 754を勉強する 例えば、2.5を浮動小数点数で表す 符号は正の値なので 0 仮数の絶対値は2.5で、2と0.5に分ける 2を2で割ると 2 / 2
→ 1 で余り 0 0.5を2でかけると 0.5 * 2 → 1.0 1以上なので1 2進数で表すと10.1となる https://ja.wikipedia.org/wiki/浮動小数点数
IEEE 754を勉強する 1.の部分は絶対なので無視 仮数部は1未満なので、右シフトして相殺分として2の指数を1とする (1 + 0.25)* 2 ^ 1
と変換される 仮数部は0.25、指数は1となる 指数部は指数にバイアス値1023を足すと1024になる https://ja.wikipedia.org/wiki/浮動小数点数
IEEE 754を勉強する 符号部(1ビット) :+ → 0 指数部(11ビット) :1024 → 100
0000 0000 仮数部(52ビット) :0.25 → 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ※ 残りを 52 ビットになるように 0 でうめる 浮動小数点は、最上位ビットから符号部、指数部、仮数部の順に表すため 0 100 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 https://ja.wikipedia.org/wiki/浮動小数点数
0.1で考えてみる 0.1 * 2 → 0.2 1未満なので0 0.2 * 2
→ 0.4 1未満なので0 0.4 * 2 → 0.8 1未満なので0 0.8 * 2 → 1.6 1以上なので1 0.6 * 2 → 1.2 1以上なので1 0.2 * 2 → 0.4 1未満なので0 0.4 * 2 → 0.8 1未満なので0 0.8 * 2 → 1.6 1以上なので1 0.6 * 2 → 1.2 1以上なので1 循環小数!
0.1で考えてみる 入りきらなくなるので値を丸める必要がある 最近接偶数丸め。0 は切り捨てて 1 は切り上げる 0011 1101 1100 1100
1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1 1 なので切り上げ 丸め誤差!
- ちゃんと計算してみると楽しい まとめ