質問

ではなく、二重の単一のデータ型を使用する方が理にかなってどのような状況はありますか?私の検索からは、二重の欠点は、ほとんどのアプリケーションのための問題ではありませんより多くのスペースを、必要とすることです。その場合には、すべての浮動小数点数は倍増すべきですか?

少し背景情報: 私は、座標や化学物質に関する多くのデータを扱うアプリケーションで働いています。少数の顧客がデータのスプレッドシートをインポートするときに、精度の高いいくつかの値は、単一の精度を切り捨てていることに気づいた。

役に立ちましたか?

解決

ほとんどのデスクトップアプリケーションで、はいています。

あなたがそれらの巨大な配列を持っている場合けれども、あなたが精度を必要としない場合は、

、その大きさを半分にすることは価値があるほど変化する可能性があります。

特にほとんどすべての消費者のデスクトップは、ハードウェアで行わ倍精度浮動小数点演算を持っていることを考える。

他のヒント

このの.NETの記事から

  

データタイプ幅

     

最も効率的なデータタイプは、   ネイティブデータ幅を使用するもの   ランタイム・プラットフォームの。現在では   プラットフォーム、データ幅が32ビットであり、   コンピュータとの両方のために   オペレーティングシステムます。

     

その結果、整数は、現在あります   ビジュアルの中で最も効率的なデータタイプ   Basic .NETの。次善のは、ロングショートしています   そして、バイト、効率のためです。   あなたはのパフォーマンスを向上させることができます   整数をオフにしてショートし、バイト   によって例えばオーバーフローチェック、   RemoveIntegerChecks設定   プロパティが、これはリスクを負います   に誤った計算   検出されないオーバーフロー。できません   上との間にオフこのチェックを切り替えます   時間を実行します。あなただけその値を設定することができます   あなたの次のビルドのために   アプリケーションます。

     

あなたが小数の値が必要な場合は、   ので、最良の選択は、ダブルで   現在の浮動小数点プロセッサ   プラットフォームは、内のすべての操作を実行します   倍精度。次の最高のシングルです   そして、小数、の順で   効率ます。

マークが彼のコメントで言うように、スペースがメモリに制約のシステム上の問題になることができます。また、インデックスを作成するか、リストをソートし、あなたがシングルスで自分の価値観を保存することができれば、なぜダブルスでそれを行うことが?

いくつかのハードウェアでは、double型の値を含む算術は、その関与の単一の値よりも時間がかかるかもしれませんが、最新のFPUは、単一のネイティブデータ型を持っている計算に内部的に使用されます(例えば、80ビットのx86用の浮動小数点値を拡張しました)関係なく、どのようなメモリ内のデータのは、あなたが使用しているタイプ。だから、「FPU計算は単精度で速くなります」と言うことである、一般的に、今日最も近代的なハードウェア上で単精度を使用するのありませんの理由です。

言った、「より少ないメモリを使用する」に加えて、理由はそれはSSEとのAltiVecなどのSIMDベクトル命令に来る非常に実用的な理由がある、他の回答に上の精緻化 - 単精度の倍の速度であることをlikeyです処理時間は、通常、同じ残りで、倍精度として、命令は固定サイズのベクトルに動作するので、あなたは、単一のベクターに2倍の単精度値を詰め込むことができます。

例えば、2つのクロックサイクルのベクトル乗算を処理することができる128ビットのベクトルユニットと、あなたは、ベクター中に4枚のシングルができるので、1つの倍精度に対して、クロック当たり2回の単精度乗算のスループットを得ることができ、 2倍対ます。

と同様の効果がメモリ帯域幅で発生し、ベクトル処理に固有ではない - あなたはダブルスの大規模な配列を持っている場合、彼らは二回しかスペースを取りませんが、倍の長場合に処理するために取るかもしれませんあなたのアルゴリズムは、(おそらくますます増加のサイズが与えられ、ベクトル処理ユニットの待ち時間を減少する)の帯域幅に制約がある。

ダブルスは、より多くのスペースを取るが、余分な精度が必要か、あってもなくてもよいです。私は、浮動小数点演算は非常に一般的であり、多くの場合、あなたは、二重またはより高い精度で計算を行うが、悪影響なしにシングルとして結果を格納できることを発見した科学の世界でのプログラミングの多くを行っています。

番号はFPUに吸い込まれた後、彼らはとにかく非常に高い精度を拡大していることに注意してください。言われていること、それはあなたが両方の精度でやっているものは何でも試してみて、結果が比較可能であるかどうかを確認するために最善でしょう。

残念ながら、コンピューティングはまだ実験的な科学である。

あなたはOpenGLをコーディングしている場合は、

それはむしろGLDoubleよりも(例えば、単一の)GLSingleを使用するのが普通です。ほぼすべての状況では、単一の精度は、ほとんどのグラフィックアプリケーションのために十分以上であるとより速くする必要があります - 私は、GPUの最新世代にこののかどうか分からない告白が。

この上の私のお気に入りの引用は、単精度は、実際にはそれが本当の問題を引き起こすことは珍しいことですので、月と背面に移動するのに十分であったということです。これは、ストレージが安価であるとの問題を10進数へ任意の奇数のバイナリになりにくいがありますように私は、最近、二重のために達するだろうとほとんどの状況の中で述べています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top