私のプログラミング経験では、実数にfloatを使用するかdoubleを使用するかを頻繁に決定する必要があります。時にはフロートに行くこともあれば、ダブルに行くこともありますが、実際にはこれはより主観的に感じます。私の決定を擁護するために直面した場合、私はおそらく正当な理由を与えないでしょう。
いつfloatを使用し、いつdoubleを使用しますか?メモリ制約が存在する場合にのみ、常にdoubleを使用しますか?または、精度要件でdoubleを使用する必要がない限り、常にfloatを使用しますか? floatとdoubleの間の基本的な演算の計算の複雑さに関して、いくつかの実質的な違いはありますか? floatまたはdoubleを使用する場合の長所と短所は何ですか?そして、あなたは長いダブルを使ったことがありますか?
浮動小数点型のデフォルトの選択はdouble
です。これは、接尾辞なしの浮動小数点リテラル、または浮動小数点数を操作する(Cの)標準関数(exp
、sin
など)で取得できるタイプでもあります。
float
は、多数の浮動小数点数(数千以上と考えてください)を操作する必要がある場合にのみ使用してください。アルゴリズムの分析により、範囲と精度が低下しないことが示されています問題。
long double
は、double
よりも広い範囲または精度が必要な場合、およびターゲットプラットフォームでこれを提供する場合に使用できます。
要約すると、float
およびlong double
は専門家が使用するために予約しておく必要があり、double
は「毎日」使用するためのものです。
最近のコンピューターを対象とするコードでは、doubleではなくfloatを使用する原因はめったにありません。精度を上げると、丸め誤差やその他の不正確さが原因で問題が発生する可能性が低くなります(ただし、なくなるわけではありません)。
Floatを使用する主な理由は次のとおりです。
したがって、基本的に、ハードウェアの制限がない場合、または倍精度の数値を格納することがメモリ使用量に大きく寄与していることが分析で示されていない限り、doubleが適しています。
すべての計算と一時変数にdouble
を使用します。数値の配列を維持する必要がある場合はfloat
を使用してください-float[]
(精度が十分な場合)、数万を超えるfloat
の数値を処理しています。
多くの/ほとんどの数学関数または演算子はdouble
を変換/返すため、途中のステップで数値をfloat
にキャストしたくない場合。
例えば。ファイルまたはストリームから100,000の数値の入力があり、それらを並べ替える必要がある場合は、数値をfloat[]
。
一部のプラットフォーム(ARM Cortex-M2、Cortex-M4など)は、doubleをサポートしていません(プロセッサーのリファレンスマニュアルで常に確認できます。コンパイルの警告やエラーがない場合でも、コードが最適であるとは限りませんdoubleをエミュレートできます。) intまたはfloatに固執する必要があるのはそのためです。
そうでない場合は、doubleを使用します。
D.ゴールドバーグの有名な記事(「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」)を確認できます。浮動小数点演算を使用する前に、よく考える必要があります。特定の状況では、それらがまったく必要とされない可能性が非常に高くなります。
現実世界の問題では、この質問に答えるときに、データのサンプリングしきい値が重要です。同様に、ノイズフロアも重要です。データタイプの選択でどちらかを超えた場合、精度を上げてもメリットはありません。
ほとんどの実際のサンプラーは24ビットDACに制限されています。仮数が24ビットの精度の場合、実世界の計算では32ビットの精度で十分であることを示唆しています。
倍精度では、メモリが2倍になります。したがって、floatでのdoubleの使用を制限すると、実行中のアプリケーションのメモリフットプリント/帯域幅を大幅に削減できます。