Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IEEE754を完全に理解した

 IEEE754を完全に理解した

PIZZA_JP#47

Kaneko Takeshi

December 24, 2021
Tweet

More Decks by Kaneko Takeshi

Other Decks in Programming

Transcript

  1. JavaScriptの数値:Number型 JavaScript の Number 型は IEEE 754 の倍精度 64ビットバイナリ形式であ り、

    Java や C# の double のようなものです。これは小数点以下の数値を表 すことができることを意味しますが、格納できる値にはいくつかの制限があ ります。 Number は小数点以下約 17 桁の精度しか保持できません。演算 は丸め誤差の影響を受けます。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number
  2. IEEE 754を勉強する 符号: 正の値なら 0、 負の値なら 1。 指数: 実際の値に 1023

    を加えた値を使う。11 桁なので2048まで表現でき るけど、指数部が負の時があるから-1023~1024 を表現して 1023 を足す ようにしてる。 仮数: 指数を調整して 1.◯◯ のように 1.で始まるように小数点を移動す る。先頭の 1 は絶対なので無視する。 https://ja.wikipedia.org/wiki/浮動小数点数
  3. 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/浮動小数点数
  4. IEEE 754を勉強する 1.の部分は絶対なので無視 仮数部は1未満なので、右シフトして相殺分として2の指数を1とする (1 + 0.25)* 2 ^ 1

    と変換される 仮数部は0.25、指数は1となる 指数部は指数にバイアス値1023を足すと1024になる https://ja.wikipedia.org/wiki/浮動小数点数
  5. 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/浮動小数点数
  6. 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 循環小数!