长双字符的 C + + 后缀是什么?

在 C + + (和 C)中,没有后缀的浮点文字默认为 double,而后缀 f意味着 float。但是得到 long double的后缀是什么呢?

在不知情的情况下,我会定义,比如说,

const long double x = 3.14159265358979323846264338328;

但是我担心的是变量 x包含的 3.14159265358979323846264338328的有效位比64少,因为这是 double文字。这种担心合理吗?

65174 次浏览

C 后缀是 L。我强烈怀疑 C + + 也是如此。

你的担心是有道理的。您的文字首先将被转换为 double,并因此被截断,然后再转换回 long double

您的担心是有道理的,您应该使用一个 L后缀来表示长的 double 文本。

来自 C + + 标准

除非显式指定,否则浮点文字的类型为 double 后缀 f 和 F 指定 float,后缀 l 和 L 指定长双精度。

与 C 标准的相应段落进行比较是很有趣的。在 C 语言中,用术语 floating constant代替了 C + + 中的 floating literal:

4无后缀浮动常数具有 double 类型。如果后缀是字母 f 或 F,它的类型为 float。如果后缀是字母 l 或 L,则为 long double

我试了 l后缀:

#include <iostream>
#include <iomanip>
#include <string>


using namespace std;


int main()
{
float t1 = 1.10000000000000000002l;
double t2 = 1.10000000000000000002l;
long double t3 = 1.10000000000000000002L;
cout << setprecision(25);
cout << t1 << endl;
cout << t2 << endl;
cout << t3 << endl;
}

不过,我得到的这个结果表明,缺乏所需的精度:

1.10000002384185791015625
1.100000000000000088817842
1.100000000000000088817842