2013-11-21 7 views
5

C++では、デフォルトでdoubleを使用し、必要があることがわかっている場合にのみfloatまたはlong doubleを使用する方が良いです。 OpenGLについては、GLfloatがデフォルトのようです。最新のGPUで倍精度が一般的であることを考慮すれば、それはまだ適切ですか?デフォルトでGLfloatまたはGLdouble?

+1

倍精度は実際には「共通」ではありません。最新のハードウェアはこれをサポートしていますが、GPGPUアプリケーションが不足しているため、すぐに使用することはできません。文字通りストレージ要件を2倍にします。つまり、 'dvec4'は' vec4'の2倍の頂点属性スロットを使います。倍精度を使用すると、メモリとGLSLの両方の実装が制限されたリソースが使い果たされます。また、倍精度でテクスチャをサンプリングすることはできません。パイプラインの* part *のみが倍精度をサポートしており、ほとんどの場合、数値を切り詰める部分です。 –

答えて

8

逆の場合があります。 C++ではデフォルトでfloatを使用していて、実際にこれらの余分な数字が本当に必要であると確信しているのであれば、doubleしか使用しないでください(いくつかの科学的、おそらく天文学的な粒子物理学、シミュレーション)。 doubleが必要と思われる場合は、固定小数点を使用するか、floatの値を正しい範囲に設定する必要があります。

あなたはではありません。は、グラフィックスに倍精度を使用します。現代のGPUはすべてそれをうまくサポートしていますが、倍精度数は単精度よりも遅いことが多く、目に見える利点はありません。 「グラフィックス」に関連するすべてのこと(99.99%は「すべて」が非常に明確な言い回しであるとします)は、floatまたはGLfloatを使用してうまく動作します。
数年前にも、一部のGPUが24ビット精度でしか動作しない場合でも、目に見える違いはありませんでした。

実際にdoubleを使用すると、と考えると、と思うと、99%の時間が間違っているはずです。

トムフォーサイスも「ダブル精度」をOffend-O-Maticの最初の点にしました。彼は "ゲーム"に特化していますが、実際にはほぼすべてのソフトウェアに適用され、一部の科学的シミュレーションは例外です。彼の推論を理解するために、付属資料A Matter of Precisionも必ず読んでください。
エリクソンのepsilon is not 0.000001プレゼンテーションは、浮動小数点で読みにくいものでなければなりません。

OpenGLでは非常によく似ています。浮動小数点の仕組みを理解して正しく使用すると、floatは正常に動作します。変換行列などを適用するときの丸め誤差は表示されません。
どのように動作するのかわからない場合は、倍精度を使用すると問題が後方にシフトしますが、期待していない場合でも問題はありません。

(それは二倍正確だから、えっ?)驚くほど、でも、今日の人々はまだであっても、通貨や時間などの不条理な原因を倍精度浮動小数点を使用して、それが自分の顔に吹くとき驚いていると人々は叫んで開始それらに。

+0

"倍精度の計算は単精度よりも遅いことが多く、目に見える利点はありません"。あなたはそれについて確かですか?一般的なケースでは明らかに間違っているように見えるので、少なくとも詳細は与えてください。 – Korchkidu

+0

@Korchkidu:たとえば[this](http://devgurus.amd.com/thread/150557)を参照してください。また、 'GLdouble'を使用して文字通りPCIeの帯域幅要件とキャッシュ圧が倍増します。しかし、画面上の結果は同じです(それにもかかわらず24ビットの精度しか使用しなかった初期のAMDの実装で証明されています)。 – Damon

+1

あなたの例はGPUについてです。しかし、一般的なケース(CPU上のC++)では、反対のdouble> floatしか聞こえませんでした。 GPUとGLfloat/Gldoubleについてはわかりません。だからこそ私は求めています。 GLfloat> Gldoubleのようです。 – Korchkidu

関連する問題