FPU

20年ほど前のMacを使ったことがあるならば
次のようなアラートメッセージを見たことがあるはずだ。

「浮動小数点コ・プロセッサがありません」

20年前のパソコンでは浮動小数点演算できない、
もしくはできるが非常に時間がかかってしまうため
コ・プロセッサが必要になってしまう機種が、普通にあった。

コ・プロセッサとは、外付けで性能アップを図るプロセッサ(演算器)だ。
メイン・プロセッサに対して、コ・プロセッサと呼ばれる。
(英語で「co-」と名詞の前に置くと、「副」という意味になる)
自力で計算したりプログラムを動かせるビデオチップもコプロである。
昔は機能ごとに部品が分かれていたのでそういうものがあったが、
逆に最近は何でもメインプロセッサに取り込む風潮である。
まるで時間とともに肥大化するどこぞのOSのカーネルのようである。

浮動小数点とは、小数点より前と後の桁数が固定でない方式の少数だ。
小学校で習う、よく見る普通の少数の表現方法である。
(ちなみに小数点の位置を固定したものは固定小数点方式という)
小数計算を思い出してほしいが、小数同士の計算は
小数点の位置合わせが必要となるため整数より時間がかかるため
昔のコンピュータでは専用の演算ユニットが別部品であった。
それがFPU(Floating Point number processing Unit)である。
今ではCPUに当然のように組み込まれており、
小さな携帯電話でも超高速で演算されてしまう。

コンピュータの演算において、整数か小数かは重要な問題だ。
なぜなら、小数同士の四則演算はすべて誤差が発生するからだ。

この誤差については、電卓で小数計算をすると分り易い。
コンピュータで扱える数値の桁数は無限ではないため、
どうしても小数部の数字がある桁まで切り捨てられてしまうのである。
(この時、丸めるために四捨五入を行うかどうかも重要な問題だ)

少数で計算した結果を、次の計算に使うことも注意を要する。
計算後の小数を1000倍(単位変換など)して使う場合、誤差も1000倍されてしまうのだ

こういった事情もあり、コンピュータにおける小数計算はバグの温床になりやすい。
どうしても必要な時にしか使わない設計方針をとるべきだ、という人もいる。
この手の原因で起きる不具合は、数値の流れを全部調べなければならず
見つけられても、良い修正方法が思いつかなかったりする。