最近のトラックバック

2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

« 10進浮動小数点(Decimal64, 32)クラスを作成しました | トップページ | 実数の範囲を表す機能を追加しました »

半精度/単精度(2進)浮動小数点・10進浮動小数点をサポートしました

Schluesselで半精度/単精度(2進)浮動小数点・10進浮動小数点を扱えるようにしました。

半精度は99s9、単精度は99f9 (R5RSの通り)
10進浮動小数点は999df9(Decimal32)、999dd9(Decimal64)とすれば扱えます。

自動型変換は
半精度<単精度<倍精度<Decimal32<Decimal64
の順になっています。

10進形式と2進形式を変換するには対数関数と実数のべき乗関数が必要になりまが、4倍精度の2進浮動小数点は4倍精度の対数関数と実数のべき乗の実現が難しいため保留にしています。
標準的な計算ライブラリであるfdlibmの実装をみると「Remezアルゴリズム」を用いた近似多項式を使用して計算していますが、多項式の係数の決定方法が難しく、2-112の精度の近似多項式係数を求めることに苦労しています。

(この点に関しては、テイラー展開を用いれば(効率は落ちますが)求めることはできると思います。)

« 10進浮動小数点(Decimal64, 32)クラスを作成しました | トップページ | 実数の範囲を表す機能を追加しました »

Scheme」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

« 10進浮動小数点(Decimal64, 32)クラスを作成しました | トップページ | 実数の範囲を表す機能を追加しました »