在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