基礎科目・情報・アルゴリズム
浮動小数点と誤差
4問H24・H27・H29・R1再
単精度浮動小数点数(符号1・指数8・仮数23ビット)への変換と、計算機の数で起きる誤差の種類が出ます。
よく出る形
- 13.0 などの実数を,問題文の手順で「符号部・指数部・仮数部」の 0 と 1 の列に直す
- 0.01 を100回足しても 1 にならない理由を選ぶ
- 誤差の文章の正誤と,単精度の計算の2型。単精度は平成29と令和元再で同じ 13.0 が出た
覚えること
- 浮動小数点数は,数を ±2α×(1+x)(1以上2未満の数 × 2のべき乗)の形にして記録する
- 単精度は 符号部1ビット(正が0,負が1),指数部8ビット(α+127 を2進数にしたもの),仮数部23ビット(x を2進数の小数にしたもの)
- 127 を足すのは,マイナスの指数も正の数で表すための決まり。指数部が 01111111(127)なら α=0,それより小さければ α はマイナス
- 2進数の小数:(0.1)2 = 1/2,(0.01)2 = 1/4,(0.001)2 = 1/8,(0.0001)2 = 1/16。(0.1)2 = 0.5 や (0.01)2 = 0.25 は有限の桁で表せる
- 丸め誤差:決まった桁数に収めるため,はみ出た桁を切り捨てたり四捨五入したりして生じる誤差。10進数の 0.1 や 0.01 は2進数で割り切れないので,足し合わせると誤差がたまる
- 桁落ち:ほぼ同じ大きさの数どうしを引くと,有効な桁が減ってしまうこと
- 情報落ち:とても大きい数にとても小さい数を足すと,小さいほうが反映されないこと
- オーバーフロー:結果が表せる範囲より大きくなること
解き方
- 実数を 2 で割れるだけ割って 1 以上 2 未満にする。例:13 ÷ 23 = 1.625 なので α=3,x=0.625
- 符号部:正なら 0,負なら 1
- 指数部:3+127=130=128+2 なので 10000010
- 仮数部:0.625=1/2+1/8=(0.101)2 なので 101 のあとに 0 が並ぶ
- 列から実数を求める時は,指数部の値 − 127 で α を出し,仮数部から x を出して ±2α×(1+x) を計算する
- 確かめ:23×1.625=13 になれば正解
ひっかけ
- 指数部に α そのもの(3 なら 00000011)を入れたり,127 を足し忘れたりしない
- 仮数部には「1.」の 1 は入れず,小数点より後ろだけを並べる
- 符号部が 1 なら負の数。値を求めたあとに負の符号をつけ忘れない
- 情報落ちで消えるのは小さいほうの数。「大きいほうの下の桁が失われる」は逆
このテーマの過去問(このサイトに解説がある 1問)
- 令和元年度(再試験)単精度浮動小数点数の表現基礎科目 I-2-4解説を読む
平成に出た同じテーマ(3問)
このサイトにはまだ解説がありません。年度と題だけです。
- 平成29年度単精度浮動小数点表現
- 平成27年度丸め誤差
- 平成24年度浮動小数点演算と誤差