web-dev-qa-db-ja.com

long doubleリテラルのC ++サフィックスは何ですか?

C++(およびC)では、接尾辞なしの浮動小数点リテラルはデフォルトでdoubleになりますが、接尾辞ffloatを意味します。しかし、long doubleを取得する接尾辞は何ですか?

知らずに、私は、たとえば

const long double x = 3.14159265358979323846264338328;

しかし、心配しているのは、変数xdoubleリテラルであるため、3.14159265358979323846264338328の有効ビットが64より少ないことです。この心配は正当化されますか?

50
Walter

C++標準から

浮動リテラルの型は、接尾辞で明示的に指定されない限り、doubleです。接尾辞fとFはfloatを指定し、接尾辞lとLはlong doubleを指定します。

C標準の対応する段落と比較するのは興味深いです。 Cには、使用される用語floating constant の代わりに floating literal C++の場合:

4接尾辞のない浮動定数の型はdoubleです。末尾に文字fまたはFが付いている場合、タイプはfloatです。文字lまたはLが末尾に付いている場合、タイプはlong doubleです

57

CサフィックスはLです。 C++でも同じだと強く疑います。

あなたの心配は正当化されます。リテラルは最初にdoubleに変換され、したがって切り捨てられ、次にlong doubleに変換されます。

18
Jens Gustedt

あなたの懸念は有効であり、長い二重リテラルにはL接尾辞を使用する必要があります。

10