在 C + + (和 C)中,没有后缀的浮点文字默认为 double,而后缀 f意味着 float。但是得到 long double的后缀是什么呢?
double
f
float
long double
在不知情的情况下,我会定义,比如说,
const long double x = 3.14159265358979323846264338328;
但是我担心的是变量 x包含的 3.14159265358979323846264338328的有效位比64少,因为这是 double文字。这种担心合理吗?
x
3.14159265358979323846264338328
C 后缀是 L。我强烈怀疑 C + + 也是如此。
L
你的担心是有道理的。您的文字首先将被转换为 double,并因此被截断,然后再转换回 long double。
您的担心是有道理的,您应该使用一个 L后缀来表示长的 double 文本。
来自 C + + 标准
除非显式指定,否则浮点文字的类型为 double 后缀 f 和 F 指定 float,后缀 l 和 L 指定长双精度。
与 C 标准的相应段落进行比较是很有趣的。在 C 语言中,用术语 floating constant代替了 C + + 中的 floating literal:
floating constant
floating literal
4无后缀浮动常数具有 double 类型。如果后缀是字母 f 或 F,它的类型为 float。如果后缀是字母 l 或 L,则为 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