なぜ私はこれらすべての警告を無効にする代わりに、3.14の3.14fを配置する必要がありますか? これには一貫した理由がありますか? C++(およびC)規格が決めたものだ3.14などの浮動小数点値は、MSVCではデフォルトでなぜdoubleと見なされますか?
答えて
。浮動小数点型のリテラルはdouble型で、float型にする必要がある場合は、f
という接尾辞を付けます。そこ理由として何らかの具体的に述べた理由ではありませんが、私はCとの互換性のため)、それはだと思うだろうと、b)精度とストレージの間のトレードオフ。 が明示的に接尾辞で指定しない限り
2.13.3浮動リテラルリテラルフローティングの種類 はdoubleです。 の接尾辞fおよびFはfloatを指定し、接尾辞lおよびLはlong doubleを指定します。 スケーリングされた値は、そのタイプの 表現可能な値の 範囲にない場合、プログラムは、病気に形成されています。
これはおそらく、Cの世界では標準です。 Doubleはより正確であり、おそらくパフォーマンスの違いは見られないので、Doubleが好ましい。 this postを読んでください。
今日のマシンではほぼ肯定的ですが、FPUを搭載した組み込み機器では私はそうは確信していません。 – jokoon
@gokoon:そうです。デフォルトで私は "普通"のマシンについて話していると仮定しました。それはデスクトップPCとサーバーを意味します。組み込みデバイスでは、最適化が重要であり、場合によってはshortとintの間で選択する必要があることも珍しくありません。 – darioo
FPUであっても、doubleはfloatの2倍のスペースを必要とするため、*非常に大きな量のデータを処理する場合、個々のレジスタレベルの操作が同じ長さをとってもメモリ帯域幅が大きくなることがあります。 – Clifford
CおよびC++は、いくつかの方法で浮くダブル好みます。あなたが気づいたように、明示的に浮動小数点型にしない限り、小数のリテラルは二重です。また、floatはvarargsで渡すことはできません、それらは常にdoubleに昇格します(charとshortはintにvarargsで昇格されるのと同じ方法です)。
むしろdouble
拡張float
であるより、契約double
としてfloat
を考えるのは、おそらく良いでしょう。すなわち、double
が好ましい浮動小数点タイプであり、は、特定の場合にはより小さいバージョンのdouble
が必要なときはいつでも使用されます。それは私が一貫した理由で知っている最も近いものです。そして、あなたがより小さなバージョンが必要な場合に起こったとしても、ルールは理にかなっています。
これはMSVCに特有のものではなく、言語標準で必要です。
ではなく、では明示的に要求されない限り精度を下げることをお勧めします。デフォルトはdoubleです。
単精度浮動小数点が提供する6桁の精度は、一般的な使用にはほとんど十分ではなく、現代のデスクトッププロセッサでは、作者が十分かつ必要であると判断したハンドコード化された最適化として使用されます。したがって、単精度リテラルを指定するには、明示的な可視マーカーが必要であることが理にかなっています。
+1; @ gokoon:適切なタイプまたはサイズを取得したい場合は、別の接尾辞を使用する必要があります。たとえば、符号なしの64ビット値を使用する場合は、接尾辞 'ull'を使用します。 – franji1
double
は、よりもはるかによく、3.14と近似できるため、おそらく?それは、ありません
3.140000000000000124344978758017532527446746826171875(double
)
3.1400001049041748046875(float
)
どちらもPIの良い近似ではありません.-D – franji1
- 1. パンダ:数値浮動小数点のデフォルトの列型はなぜですか?
- 2. なぜ浮動小数点型の浮動小数点型は、正常に動作しないのですか?
- 3. はなぜMSVCとGCCはデフォルト値で
- 4. なぜこの浮動小数点比較は真ですか?
- 5. なぜNaNの型は浮動小数点ですか?
- 6. Javascriptでは、なぜgetBoundingClientRect()が浮動小数点値を返すのですか?
- 7. 浮動小数点数を取得できないのはなぜですか?
- 8. 浮動小数点数は浮動小数点数ですか?
- 9. 浮動小数点数の乗算で浮動小数点を浮動小数点数に比べて高速に行うのはなぜですか?
- 10. Erlangの変数に浮動小数点値を格納すると、浮動小数点値が切り捨てられるのはなぜですか?
- 11. モジュロが浮動小数点数になるのはなぜですか?
- 12. 浮動小数点値と浮動小数点値の比較
- 13. なぜ浮動小数点数を丸めるのですか?
- 14. Cで浮動小数点エラーが異なるのはなぜですか?
- 15. divは浮動小数点の寸法をとるのはなぜですか?
- 16. これはなぜ浮動小数点変換で起こりますか?
- 17. 浮動小数点型のタイトルツールチップはなぜ機能しないのですか?
- 18. CSSに浮動小数点の中心がないのはなぜですか?
- 19. 浮動小数点定数3.14fがLLVMの64ビット値0x40091EB860000000で表されるのはなぜですか?
- 20. Java doubleとOracleがSQL Serverの数値に浮動小数点
- 21. この浮動小数点配列はなぜエラーになりますか?
- 22. 浮動小数点の浮動小数点が正しく浮動しない
- 23. なぜ "3"の整数はMATLABの浮動小数点ですか?
- 24. 浮動小数点例外C++なぜ、それは何ですか?
- 25. 浮動小数点例外Cなぜ、それは何ですか?
- 26. どの浮動小数点比較がより正確で、なぜですか?
- 27. なぜこの浮動小数点例外が生成されますか?
- 28. 浮動小数点数を小数点なしで書く
- 29. CとC++で浮動小数点数/複素数の除算演算がないのはなぜですか?
- 30. このように浮動小数点型の値が出力されるのはなぜですか?
そして、それはかなり明確OPの質問に答える:ここでは正確な値はありますか? –