📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の9版が非表示)
28行目: 28行目:
*: 指数部は、数値を2の何乗するかを示す。
*: 指数部は、数値を2の何乗するかを示す。
*: 指数部はバイアス (基準となる値) として127を用いたバイアス形式で表現される。
*: 指数部はバイアス (基準となる値) として127を用いたバイアス形式で表現される。
*: 実際の指数Eは、ストアされる指数値eからバイアスを減算することにより求められる。
*: 指数部 eは、実際の指数 Eからバイアス (127) を加算することにより求められる。
*: <math>E = e - 127</math>
*: <math>\mbox{ 指 数 部 } \, \, e = \mbox{E} + 127</math>
*: <br>
*: 最小の正規化指数: <math>00000001_{(2)} = -126_{(10)}</math>
*: 最大の正規化指数: <math>11111110_{(2)} = 127_{(10)}</math>
* 仮数部 : 23ビット
* 仮数部 : 23ビット
*: 仮数部は、数値の有効桁 (精度) を表す。
*: 仮数部は、数値の有効桁 (精度) を表す。
*: 仮数部は、通常、1.XXXX...の形で表現され、仮数部にはこの小数部分が格納される。 (先頭の1は省略される)
*: 仮数部は、通常、1.XXXX...の形で表現され、仮数部にはこの小数部分が格納される。 (先頭の1は省略される)
<br>
[[ファイル:IEEE754 Float Block Diagram.jpg|フレームなし|中央]]
<br>
<br>
===== 例: 9.875<sub>(10)</sub> =====
===== 例: 9.875<sub>(10)</sub> =====
125行目: 130行目:
*: 指数部は、数値を2の何乗するかを示す。
*: 指数部は、数値を2の何乗するかを示す。
*: 指数部はバイアス (基準となる値) として1023を用いたバイアス形式で表現される。
*: 指数部はバイアス (基準となる値) として1023を用いたバイアス形式で表現される。
*: 実際の指数Eは、ストアされる指数値eからバイアスを減算することにより求められる。
*: 指数部 eは、実際の指数 Eからバイアス (1023) を加算することにより求められる。
*: <math>E = e - 1023</math>
*: <math>\mbox{ 指 数 部 } \, \, e = \mbox{E} + 1023</math>
*: <br>
*: 最小の正規化指数: <math>00000000001_{(2)} = -1022_{(10)}</math>
*: 最大の正規化指数: <math>11111111110_{(2)} = 1023_{(10)}</math>
* 仮数部 (Mantissa or Significand) : 52ビット
* 仮数部 (Mantissa or Significand) : 52ビット
*: 仮数部は、数値の有効桁 (精度) を表す。
*: 仮数部は、数値の有効桁 (精度) を表す。
136行目: 144行目:
* M : 仮数部
* M : 仮数部
* E : 指数部
* E : 指数部
<br>
[[ファイル:IEEE754 Double Block Diagram.jpg|フレームなし|中央]]
<br>
<br>
===== 例 : 倍精度浮動小数点数 =====
===== 例 : 倍精度浮動小数点数 =====
153行目: 163行目:
<math>(+1) \times 1.25 \times 2^{4} = 1.25 \times 16 = 20.0</math><br>
<math>(+1) \times 1.25 \times 2^{4} = 1.25 \times 16 = 20.0</math><br>
<br>
<br>
==== 特殊な値 ====
==== 特殊な値 ====
* ゼロ
* ゼロ
163行目: 174行目:


== 浮動小数点数の構造  ==
== 浮動小数点数の構造  ==
==== ケチ表現 (正規化数) について ====
仮数部は、2進数で1.xxxxx...という形式で表現される。<br>
小数点の前の1は暗黙的に存在する (ケチ表現) とみなされる。<br>
<br>
そのため、例えば、仮数部が23ビットの場合は実質24ビット分の精度を得ることができる。<br>
<br>
==== 単精度浮動小数点数(float型) ====
==== 単精度浮動小数点数(float型) ====
単精度浮動小数点数(float型)は、4バイトのサイズを持ち、符号部(1bit)、指数部(8bit)、仮数部(23bit)で表す。<br>
単精度浮動小数点数(float型)は、4バイトのサイズを持ち、符号部(1bit)、指数部(8bit)、仮数部(23bit)で表す。<br>
<br>
<br>
指数部は、-127のバイアスが掛かる。<br>
<u>指数部は、実際の指数 + 127のバイアスが掛かる。</u><br>
仮数部は、仮数の小数点以下を表す。すなわち、仮数は仮数部の先頭に1(ケチ表現)を付加したものとなる。<br>
仮数部は、仮数の小数点以下を表す。すなわち、仮数は仮数部の先頭に1(ケチ表現)を付加したものとなる。<br>
  単精度浮動小数点数(float型)の表す値 = (-1)<sup>符号部</sup> × 2<sup>(指数部 - 127)</sup> × 1.仮数部
  単精度浮動小数点数(float型)の表す値 = (-1)<sup>符号部</sup> × 2<sup>指数部 = (実際の指数 + 127)</sup> × 1.仮数部
<br>
* 仮数部 : 2進数から10進数への変換
*: 2進数24桁は、<math>\log_{10} 2^{24} \cong 7.22 ...</math><br>
<br>
したがって、単精度浮動小数点数(float型)の精度(有効桁数)は、2進数では24 (= 23 + 1) 桁、10進数では約7桁となる。<br>
<br>
<br>
単精度浮動小数点数(float型)の精度(有効桁数)は、2進数では24(=23 + 1)桁、10進数では約7桁となる。<br>
指数部も有限であるため、単精度浮動小数点数(float型)で表すことのできる実数の絶対値は、以下の範囲に限られる。<br>
指数部も有限であるため、単精度浮動小数点数(float型)で表すことのできる実数の絶対値は、以下の範囲に限られる。<br>
<math>1.175494 \times 10^{-38} < x < 3.402823 \times 10^{38}</math><br>
<math>1.175494 \times 10^{-38} < x < 3.402823 \times 10^{38}</math><br>
191行目: 212行目:
倍精度浮動小数点数(double型)は、単精度浮動小数点数(float型)に比べて、倍の精度(8byte)を持ち、符号部(1bit)、指数部(11bit)、仮数部(52bit)で表す。<br>
倍精度浮動小数点数(double型)は、単精度浮動小数点数(float型)に比べて、倍の精度(8byte)を持ち、符号部(1bit)、指数部(11bit)、仮数部(52bit)で表す。<br>
<br>
<br>
指数部は、-1023のバイアスが掛かる。<br>
<u>指数部は、実際の指数 + 1023のバイアスが掛かる。</u><br>
仮数部は、仮数の小数点以下を表す。すなわち、仮数は仮数部の先頭に1(ケチ表現) を付加したものとなる。<br>
仮数部は、仮数の小数点以下を表す。<br>
  倍精度浮動小数点数(double型)の表す値 = (-1)<sup>符号部</sup> × 2<sup>(指数部 - 1023)</sup> × 1.仮数部
すなわち、仮数は仮数部の先頭に1 (ケチ表現) を付加したものとなる。<br>
  倍精度浮動小数点数(double型)の表す値 = (-1)<sup>符号部</sup> × 2<sup>指数部 = (実際の指数 + 1023)</sup> × 1.仮数部
<br>
* 仮数部 : 2進数から10進数への変換
*: 2進数24桁は、<math>\log_{10} 2^{53} \cong 15.954 ...</math><br>
<br>
<br>
倍精度浮動小数点数(double型)の精度(有効桁数)は、2進数では53(=52 + 1)桁、10進数では約15桁となる。<br>
したがって、倍精度浮動小数点数(double型)の精度(有効桁数)は、2進数では53 (= 52 + 1) 桁、10進数では約15桁 (16桁弱) となる。<br>
<br>
<br>
指数部も有限であるため、倍精度浮動小数点数(double型)で表すことができる実数の絶対値は、以下の範囲に限られる。<br>
指数部も有限であるため、倍精度浮動小数点数(double型)で表すことができる実数の絶対値は、以下の範囲に限られる。<br>
237行目: 262行目:
例.<br>
例.<br>
以下のような絶対値のほぼ等しい値があるとする。<br>
以下のような絶対値のほぼ等しい値があるとする。<br>
A = 1.1111111123334455667788<br>
<math>A = 1.1111111123334455667788</math><br>
B = 1.111111111111111111111122<br>
<math>B = 1.111111111111111111111122</math><br>
<br>
<br>
A - Bを行った後、正規化する。<br>
<math>A - B</math> を行った後、正規化する。<br>
1.2223344556666×10<sup>-7</sup> (1)<br>
<math>1.2223344556666 \times 10^{-7} \quad \cdots \, \mbox{(1)}</math><br>
<br>
<br>
上記を、有効桁数10桁の浮動小数点数で計算する。<br>
上記を、有効桁数10桁の浮動小数点数で計算する。<br>
a = 1.111111123<br>
<math>a = 1.111111123</math><br>
b = 1.111111111<br>
<math>b = 1.111111111</math><br>
<br>
<br>
a - bを行った後、正規化する。<br>
<math>a - b</math> を行った後、正規化する。<br>
1.200000000×10<sup>-7</sup> (2)<br>
<math>1.200000000 \times 10^{-7} \quad \cdots \, \mbox{(2)}</math><br>
<br>
<br>
上記の(1)を有効桁数10桁に変換する。<br>
上記の演算結果(1)を有効桁数10桁に変換する。<br>
(2)(1)と比べて桁数が減少して、ほぼ等しい値にも関わらず、大きな誤差が生じていることが分かる。<br>
演算結果(2)は、演算結果(1)と比べて桁数が減少して、ほぼ等しい値にもかかわらず大きな誤差が生じていることが分かる。<br>
1.222334455×10<sup>-7</sup> … (1)<br>
<math>1.222334455 \times 10^{-7} \quad \cdots \, \mbox{(1)}</math><br>
1.200000000×10<sup>-7</sup> … (2)<br>
<math>1.200000000 \times 10^{-7} \quad \cdots \, \mbox{(2)}</math><br>
<br>
<br>
==== 情報落ち ====
==== 情報落ち ====
263行目: 288行目:
以下のような大きな値と小さい値があるとする。<br>
以下のような大きな値と小さい値があるとする。<br>
A=1100000000000<br>
<math>A = 1100000000000</math><br>
B=0.11<br>
<math>B = 0.11</math><br>
<br>
<br>
両方の値を有効桁数10桁の浮動小数点数に変換する。<br>
両方の値を有効桁数10桁の浮動小数点数に変換する。<br>
a = 1.100000000×10<sup>12</sup><br>
<math>a = 1.100000000 \times 10^{12}</math><br>
b = 1.100000000×10<sup>-1</sup><br>
<math>b = 1.100000000 \times 10^{-1}</math><br>
<br>
<br>
この時、bの指数をaに合わせると仮数部が0となり情報が落ちる。<br>
この時、bの指数をaに合わせると仮数部が0となり情報が落ちる。<br>
b = 0.000000000×10<sup>12</sup><br>
<math>b = 0.000000000 \times 10^{12}</math><br>
<br>
<br>
==== 打ち切り誤差 ====
==== 打ち切り誤差 ====
無限小数等の値に対して、ある程度の時点で処理を打ち切ることで発生する誤差のことである。<br>
無限小数等の値に対して、ある程度の時点で処理を打ち切ることで発生する誤差のことである。<br>
285行目: 309行目:


__FORCETOC__
__FORCETOC__
[[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:MFC]][[カテゴリ:Qt]][[カテゴリ:C_Sharp]]
[[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:MFC]][[カテゴリ:Qt]][[カテゴリ:C_Sharp]][[カテゴリ:Rust]][[カテゴリ:Python]][[カテゴリ:Web]]