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
IEEE754を完全に理解した
Search
Kaneko Takeshi
December 24, 2021
Programming
85
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
44
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
40
CSS Logical Properties and Values
tkckaneko
0
55
Visual Effect Graphをさわってみた
tkckaneko
0
39
Other Decks in Programming
See All in Programming
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.2k
テーブルをDELETEした
yuzneri
0
130
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
180
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
1
180
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
FDEが実現するAI駆動経営の現在地
gonta
2
260
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
140
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.5k
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
550
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
240
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
480
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Writing Fast Ruby
sferik
630
63k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
460
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.7k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
420
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
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 なので切り上げ 丸め誤差!
- ちゃんと計算してみると楽しい まとめ