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



在c (和c)中,浮点字面的flo point默认为 double,而后缀 f表示 float。但是获得long double的后缀是什么?

不知道,我会定义,说

const long double x = 3.14159265358979323846264338328;

,但我担心的是,可变x包含的3.14159265358979323846264338328的显着位比64较少,因为这是double字面的。这是有道理的吗?

来自C 标准

除非明确指定,否则浮动文字的类型是两倍 通过后缀。后缀F和F指定浮子,后缀L和L 指定长双。

与C标准的相应段落进行比较很有趣。在C中,使用术语floating constant而不是C 中的floating literal

4一个未固定的浮动常数具有双型。如果字母f或f的后缀为float类型。如果字母l或l的后缀,它具有类型的长double

c后缀为 L。我强烈怀疑C 是一样的。

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

您的担忧是有效的,您应该使用L后缀为长双字面。

我尝试了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

最新更新