在C ++(和C)中,没有后缀的浮点文字默认为double
,而后缀f
则隐含float
。但获得long double
的后缀是什么?
不知道,我会定义,比方说,
const long double x = 3.14159265358979323846264338328;
但我担心变量x
包含的3.14159265358979323846264338328
的有效位数少于64,因为这是double
字面值。这种担心是否合理?
答案 0 :(得分:56)
来自C ++标准
除非明确指定,否则浮动文字的类型为double 用后缀。后缀f和F指定float,后缀为l和L. 指定long double。
与C标准的相应段落进行比较很有意思。在C语言中,C ++中使用了术语floating constant
而不是floating literal
:
4未加浮动的常量类型为double。如果以字母f或F为后缀,则表示类型为float。如果以字母l或L为后缀,则其类型为long double
答案 1 :(得分:18)
C后缀为L
。我强烈怀疑C ++是一样的。
你的担心是合理的。您的文字将首先转换为double
,然后被截断,然后转换回long double
。
答案 2 :(得分:10)
您的担忧是有效的,您应该使用L
后缀来表示长双字。
答案 3 :(得分:0)
我尝试了 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