2

表現可能な最大の負の浮動小数点数を指定するプラットフォームに依存しない方法は何ですか?

PS3 の SPU で実行すると壊れるアルゴリズムが見つかりましたが、PPU 用にコンパイルすると問題なく動作しました。

float x = -FLT_MAX;
/* stuff */
if (x > 0.0f) {
    // If x is unchanged, code is executed on SPU
}

本質的に、明確に定義された負の同等物はありFLT_MAXますか?

4

2 に答える 2

6

必要ですstd::numeric_limits::lowest()が、これはc ++ 0xのみであるため、現時点ではクロスプラットフォームではありません。

あなたは間違いなく望んでいませんstd::numeric_limits::min()-それは最小の大きさであり、最もネガティブではありません。

常に他のすべてのdoubleよりも小さいものが必要な場合は、を使用します-numeric_limits<double>::infinity()

于 2010-09-03T06:07:09.830 に答える
4

/* スタッフ */ の内容を知らなければ、ここで問題を完全に解決することはできないと思います。

ここには、浮動小数点計算に固有の問題に関する優れたスライド セットがあります: http://realtimecollisiondetection.net/pubs/GDC07_Ericson_Physics_Tutorial_Numerical_Robustness.ppt - 問題の原因に関するヒントがそこにあるかもしれません。

IEEE 754 単精度浮動小数点は、SPU と PPU では同じではありません。詳細な説明は、http://cell.scei.co.jp/e_download.htmlから入手できる SPU ISA ドキュメントの第 9 章にあります。単精度浮動小数点数の最大値も含まれます。

于 2010-09-03T23:26:31.033 に答える