2 つの「float」を使用して「double」をエミュレートする 質問する

2 つの「float」を使用して「double」をエミュレートする 質問する

私は、32 ビット単精度浮動小数点演算のみをサポートする組み込みハードウェア用のプログラムを書いています。しかし、私が実装しているアルゴリズムでは、64 ビット倍精度の加算と比較が必要です。2doubleつの のタプルを使用してデータ型をエミュレートしようとしていますfloat。したがって、 はタプルを含むdouble dとしてエミュレートされます。struct(float d.hi, float d.low)

辞書式順序を使用すると、比較は簡単になるはずです。ただし、どの基数を使用すればよいかわからないため、加算は少し注意が必要です。 を使用すべきでしょうかFLT_MAX? また、繰り上がりを検出するにはどうすればよいでしょうか?

これはどうすればできるのでしょうか?


編集(明確化):追加の範囲ではなく、追加の有効桁数が必要です。

ベストアンサー1

double-float は、単精度数値のペアを使用して単精度演算のほぼ 2 倍の精度を実現する手法です。ただし、単精度指数範囲はわずかに縮小されます (範囲の端での中間アンダーフローとオーバーフローのため)。基本的なアルゴリズムは、1970 年代に TJ Dekker と William Kahan によって開発されました。以下に、これらの手法を GPU に適用する方法を示す比較的最近の 2 つの論文を挙げますが、これらの論文で取り上げられている内容の多くはプラットフォームに関係なく適用できるため、手元のタスクに役立つはずです。

https://hal.archives-ouvertes.fr/hal-00021443Guillaume Da Graça、David Defour グラフィックス ハードウェアでの float-float 演算子の実装、第 7 回実数とコンピュータに関する会議、RNC7。

http://andrewthall.org/papers/df64_qf128.pdfAndrew Thall GPU 計算のための拡張精度浮動小数点数。

おすすめ記事