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

 
(同じ利用者による、間の2版が非表示)
36行目: 36行目:
*: 仮数部は、数値の有効桁 (精度) を表す。
*: 仮数部は、数値の有効桁 (精度) を表す。
*: 仮数部は、通常、1.XXXX...の形で表現され、仮数部にはこの小数部分が格納される。 (先頭の1は省略される)
*: 仮数部は、通常、1.XXXX...の形で表現され、仮数部にはこの小数部分が格納される。 (先頭の1は省略される)
<br>
[[ファイル:IEEE754 Float Block Diagram.jpg|フレームなし|中央]]
<br>
<br>
===== 例: 9.875<sub>(10)</sub> =====
===== 例: 9.875<sub>(10)</sub> =====
142行目: 144行目:
* M : 仮数部
* M : 仮数部
* E : 指数部
* E : 指数部
<br>
[[ファイル:IEEE754 Double Block Diagram.jpg|フレームなし|中央]]
<br>
<br>
===== 例 : 倍精度浮動小数点数 =====
===== 例 : 倍精度浮動小数点数 =====
179行目: 183行目:
単精度浮動小数点数(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>
<br>
* 仮数部 : 2進数から10進数への変換
* 仮数部 : 2進数から10進数への変換
208行目: 212行目:
倍精度浮動小数点数(double型)は、単精度浮動小数点数(float型)に比べて、倍の精度(8byte)を持ち、符号部(1bit)、指数部(11bit)、仮数部(52bit)で表す。<br>
倍精度浮動小数点数(double型)は、単精度浮動小数点数(float型)に比べて、倍の精度(8byte)を持ち、符号部(1bit)、指数部(11bit)、仮数部(52bit)で表す。<br>
<br>
<br>
<u>指数部は、-1023のバイアスが掛かる。</u><br>
<u>指数部は、実際の指数 + 1023のバイアスが掛かる。</u><br>
仮数部は、仮数の小数点以下を表す。<br>
仮数部は、仮数の小数点以下を表す。<br>
すなわち、仮数は仮数部の先頭に1 (ケチ表現) を付加したものとなる。<br>
すなわち、仮数は仮数部の先頭に1 (ケチ表現) を付加したものとなる。<br>
  倍精度浮動小数点数(double型)の表す値 = (-1)<sup>符号部</sup> × 2<sup>(指数部 - 1023)</sup> × 1.仮数部
  倍精度浮動小数点数(double型)の表す値 = (-1)<sup>符号部</sup> × 2<sup>指数部 = (実際の指数 + 1023)</sup> × 1.仮数部
<br>
<br>
* 仮数部 : 2進数から10進数への変換
* 仮数部 : 2進数から10進数への変換
258行目: 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>
==== 情報落ち ====
==== 情報落ち ====
284行目: 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>
306行目: 309行目:


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