浮動小数点
浮動小数点は,実数(小数点の付いた数)を扱う場合に使用する形式で、指数を使い,大きな数や小さな数を固定小数点よりも少ないビット数で表現できます。
浮動小数点の形式
IEEE754,32ビット形式
S:仮数部の符号(0:正,1:負)
E:2を基数として,実際の値に127を加えたバイアス値(後述)
B:絶対値を2進数で表す。1.M(1.xxx…)となるように,桁移動する(正規化)。
7.25をIEEE754で表現すると
① 10進数7.25は正数なので,符号(S)に0を入れます。
0 E B
② 10進数7.25を2進数で表現すると,111.01となり,仮数部が1.M(1.xxx…)になる
ように正規化します。
111.01=111.01×20
→(正規化)→ 1.1101×22
仮数部(B)の最上位から順に1101,残りのビットに0を入れます。ここで,仮数部の
「1.」はこの形式では自明なので省略されています。1桁節約していることになります。
0 E 110100 … 00
③ 指数部(E)は,2+127=129,2進数に基数変換して10000001を入れます。
确定符号位:由于7.25是正数,符号位为0(正数)。
将绝对值转换为二进制形式:7的二进制表示为0111,0.25的二进制表示为0.01。将它们组合在一起得到0111.01。
归一化数:将二进制数0111.01归一化,使小数点位于第一个非零数字的右边,得到1.11101。
计算指数:归一化后的数小数点右移4位,因此指数部分为4。加上偏移量127,指数位为131(二进制表示为10000011)。
表示尾数:将归一化后的数的小数部分提取出来得到尾数部分11101。
组合符号、指数和尾数:将符号位、指数位和尾数位组合在一起得到32位的二进制表示。
最终,十进制数7.25转换为IEEE 754单精度浮点数的二进制表示为:
01000001111010000000000000000000
誤差
コンピュータ内部で,数値を指定されたビット数で表現しているために,真の値と表現する値との間に差が発生することを誤差といい。
桁あふれ誤差
表現できる範囲を超えることで発生する誤差。
オーバフロー 表現できる範囲を超えること
アンダフロー 浮動小数点では限りなく0に近づいて表現しきれなくなり発生するアンダフロー
丸め誤差
切捨て・切上げ・四捨五入することで発生する誤差
桁落ち誤差
情報落ち誤差
打切り誤差
計算処理を打ち切ることで発生する誤差
円周率は3.14159…と続きますが,計算処理を打ち切って3.14とすることによって発生します