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
89
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
48
Eye Tracking on the Browser
tkckaneko
0
100
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
61
Visual Effect Graphをさわってみた
tkckaneko
0
41
Other Decks in Programming
See All in Programming
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
7
5.1k
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.6k
スマート反転とウェブアクセシビリティ
camiha
0
220
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
390
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
320
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
12
3.4k
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
910
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
150
iOSDCのペンライトを自動制御したい!
akkeylab
0
120
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
420
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
290
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
890
BBQ
matthewcrist
89
10k
How to Talk to Developers About Accessibility
jct
2
560
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Optimising Largest Contentful Paint
csswizardry
37
4k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
290
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Crafting Experiences
bethany
1
360
ラッコキーワード サービス紹介資料
rakko
1
5M
Are puppies a ranking factor?
jonoalderson
2
4k
Everyday Curiosity
cassininazir
0
330
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 なので切り上げ 丸め誤差!
- ちゃんと計算してみると楽しい まとめ