2010-12-04 5 views

答えて

17

。浮動小数点型のリテラルはdouble型で、float型にする必要がある場合は、fという接尾辞を付けます。そこ理由として何らかの具体的に述べた理由ではありませんが、私はCとの互換性のため)、それはだと思うだろうと、b)精度とストレージの間のトレードオフ。 が明示的に接尾辞で指定しない限り

2.13.3浮動リテラルリテラルフローティングの種類 はdoubleです。 の接尾辞fおよびFはfloatを指定し、接尾辞lおよびLはlong doubleを指定します。 スケーリングされた値は、そのタイプの 表現可能な値の 範囲にない場合、プログラムは、病気に形成されています。

+0

そして、それはかなり明確OPの質問に答える:ここでは正確な値はありますか? –

0

これはおそらく、Cの世界では標準です。 Doubleはより正確であり、おそらくパフォーマンスの違いは見られないので、Doubleが好ましい。 this postを読んでください。

+0

今日のマシンではほぼ肯定的ですが、FPUを搭載した組み込み機器では私はそうは確信していません。 – jokoon

+0

@gokoon:そうです。デフォルトで私は "普通"のマシンについて話していると仮定しました。それはデスクトップPCとサーバーを意味します。組み込みデバイスでは、最適化が重要であり、場合によってはshortとintの間で選択する必要があることも珍しくありません。 – darioo

+0

FPUであっても、doubleはfloatの2倍のスペースを必要とするため、*非常に大きな量のデータを処理する場合、個々のレジスタレベルの操作が同じ長さをとってもメモリ帯域幅が大きくなることがあります。 – Clifford

5

CおよびC++は、いくつかの方法で浮くダブル好みます。あなたが気づいたように、明示的に浮動小数点型にしない限り、小数のリテラルは二重です。また、floatはvarargsで渡すことはできません、それらは常にdoubleに昇格します(charとshortはintにvarargsで昇格されるのと同じ方法です)。

むしろdouble拡張floatであるより、契約doubleとしてfloatを考えるのは、おそらく良いでしょう。すなわち、doubleが好ましい浮動小数点タイプであり、は、特定の場合にはより小さいバージョンのdoubleが必要なときはいつでも使用されます。それは私が一貫した理由で知っている最も近いものです。そして、あなたがより小さなバージョンが必要な場合に起こったとしても、ルールは理にかなっています。

1

これはMSVCに特有のものではなく、言語標準で必要です。

ではなく、では明示的に要求されない限り精度を下げることをお勧めします。デフォルトはdoubleです。

単精度浮動小数点が提供する6桁の精度は、一般的な使用にはほとんど十分ではなく、現代のデスクトッププロセッサでは、作者が十分かつ必要であると判断したハンドコード化された最適化として使用されます。したがって、単精度リテラルを指定するには、明示的な可視マーカーが必要であることが理にかなっています。

+0

+1; @ gokoon:適切なタイプまたはサイズを取得したい場合は、別の接尾辞を使用する必要があります。たとえば、符号なしの64ビット値を使用する場合は、接尾辞 'ull'を使用します。 – franji1

0

doubleは、よりもはるかによく、3.14と近似できるため、おそらく?それは、ありません

3.140000000000000124344978758017532527446746826171875(double

3.1400001049041748046875(float

+4

どちらもPIの良い近似ではありません.-D – franji1

関連する問題