C++では、デフォルトでdouble
を使用し、必要があることがわかっている場合にのみfloat
またはlong double
を使用する方が良いです。 OpenGLについては、GLfloat
がデフォルトのようです。最新のGPUで倍精度が一般的であることを考慮すれば、それはまだ適切ですか?デフォルトでGLfloatまたはGLdouble?
答えて
逆の場合があります。 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
は正常に動作します。変換行列などを適用するときの丸め誤差は表示されません。
どのように動作するのかわからない場合は、倍精度を使用すると問題が後方にシフトしますが、期待していない場合でも問題はありません。
(それは二倍正確だから、えっ?)驚くほど、でも、今日の人々はまだであっても、通貨や時間などの不条理な原因を倍精度浮動小数点を使用して、それが自分の顔に吹くとき驚いていると人々は叫んで開始それらに。
"倍精度の計算は単精度よりも遅いことが多く、目に見える利点はありません"。あなたはそれについて確かですか?一般的なケースでは明らかに間違っているように見えるので、少なくとも詳細は与えてください。 – Korchkidu
@Korchkidu:たとえば[this](http://devgurus.amd.com/thread/150557)を参照してください。また、 'GLdouble'を使用して文字通りPCIeの帯域幅要件とキャッシュ圧が倍増します。しかし、画面上の結果は同じです(それにもかかわらず24ビットの精度しか使用しなかった初期のAMDの実装で証明されています)。 – Damon
あなたの例はGPUについてです。しかし、一般的なケース(CPU上のC++)では、反対のdouble> floatしか聞こえませんでした。 GPUとGLfloat/Gldoubleについてはわかりません。だからこそ私は求めています。 GLfloat> Gldoubleのようです。 – Korchkidu
- 1. GLfloatを初期化する
- 2. OpenGL - GLfloatが認識されない
- 3. QT 5.7 - エラーC2061未定義の識別子GLdouble(qopenglfunctions.h)
- 4. GLKit:[描画ピクセル] GLfloat配列を初期化する
- 5. 頂点にGLfloatの代わりにGLshortを使用する
- 6. vec4(GLfloat quad)の配列をopenGLシェーダーに一様に渡す
- 7. デフォルトのパラメータまたはkwargs?
- 8. 関連オブジェクトまたはデフォルト
- 9. NelmioApiDocデフォルトでは、デフォルト
- 10. 値はヌルまたはデフォルト値
- 11. デフォルトのクラスをエクスポートするページまたはデフォルトのアプリケーションをエクスポート
- 12. Eloquentデフォルトの属性値:$ attributesまたはDB列のデフォルト値?
- 13. デフォルトでは、DispatchQueue .serialまたは.concurrentですか?
- 14. C++ 11:デフォルトのコンストラクタ:ImplicitまたはExplicit?
- 15. デフォルトまたは不明なテンプレート型
- 16. デフォルトのウェブページの幅 - 1024pxまたは980px?
- 17. MYSQL数または合計デフォルト値
- 18. Javaのデフォルトのフォームアクションまたはボタン
- 19. デフォルトのログインまたはソーシャル・ログイン
- 20. pROCデフォルトのDeLongまたはブートストラップ
- 21. INTのデフォルト値またはバインド
- 22. デフォルト値の作成または変更
- 23. 配列フェッチまたはデフォルト関数
- 24. MFC「非表示」または「デフォルト」のファンクションキーアクセラレータ?
- 25. は、Visual Studioは、デフォルトでは、デフォルト
- 26. デフォルトでは、vars.yamlがデフォルトでロードされますか?
- 27. デフォルトでエクスポートが失敗しました。
- 28. Bosun metrics rate - 「自動」またはデフォルト値は何ですか?
- 29. アンドロイドで使用されるレイアウトファイルは、デフォルトまたはmdpiから
- 30. org.springframework.data.domain.Pageable?10または20のsizeのデフォルト値は何ですか?
倍精度は実際には「共通」ではありません。最新のハードウェアはこれをサポートしていますが、GPGPUアプリケーションが不足しているため、すぐに使用することはできません。文字通りストレージ要件を2倍にします。つまり、 'dvec4'は' vec4'の2倍の頂点属性スロットを使います。倍精度を使用すると、メモリとGLSLの両方の実装が制限されたリソースが使い果たされます。また、倍精度でテクスチャをサンプリングすることはできません。パイプラインの* part *のみが倍精度をサポートしており、ほとんどの場合、数値を切り詰める部分です。 –