数値解析日記

数値解析関係のネタ帳。C++,pythonなど

可変長指数部浮動小数点とはなにか?

可変長指数部浮動小数点数の定義

 可変長指数部浮動小数点数(以下、VLE)とは、通常の浮動小数点数とは異なり、仮数部、指数部の区切りを変更することができる浮動小数点数である。

 アイデアそのものは古く。1971年のTapered Floating Point Number(以下、TFP)や1983年の万能数値表現URRなどがある。

 その後、日本ではURRの改良や、回路上での実装が提案されるものの、2000年までにほぼ進歩が止まる。形式として最新なのは1997年の新しい可変長指数部浮動小数点数表現形式の提案っぽい。

可変長指数部浮動小数点数の特徴

 通常の浮動小数点数、例えば64bitの倍精度浮動小数点数(double型)であれば、符号部1bit、指数部11bit、仮数部52bitで構成されている。

 VLEの特徴は先程述べたように、仮数部、指数部の区切りを変更することができることである。そのため、仮数部1bit、指数部と仮数部で63bitという形式になる。URRやTFPの違いは、この指数部をどのように表現するか?という部分である。

 構成の仕方によるが、多くのVLEはIEEE 754 Stdの浮動小数点数よりも以下の点を満たそうとしているように見える。

  • 指数部の大きさに応じて、良い感じに指数部を割り当て、仮数部をなるべく多く確保する

 つまり、指数部の絶対値が小さければ仮数部の割り当てを大きく、指数部の絶対値が大きければ指数部の割り当てを小さくする。そのため、表現範囲がIEEE規格よりも広くなる。(しかし、場所によってその精度が大きく変化する。)

可変長指数部浮動小数点数を勉強する方へ

 もし、可変長指数部浮動小数点数を勉強しようかなと思う方がいたら、以下の順番で読むと良い気がする。

  1. あふれのない浮動小数点表示方式  今のIEEE 754 Stdの規格以前の古のお話が最初に載っていたりする。
  2. 二重指数分割に基づくデータ長独立実数値表現法II  複雑だけどすごい設計。このあとの展開もciniiの被引用論文から多数辿れる。
  3. 新しい可変長指数部浮動小数点数表現形式の提案  URRなどの問題点を指摘している。特に「計算結果の指数部が計算前よりも、2bit長以上増えると面倒なことになる」などの問題点を具体的に指摘しており有用。それを踏まえた上で、どのようなVLEが適切なのかの基準も提案されている。

 詳しい解説・説明は後日アップロードします。

最後に

私が一番イカしている先行研究だと思った松井・伊理形式を考案された伊理先生が亡くなられたそうです。

ご冥福をお祈りします。本当にありがとうございました。