gpt4 book ai didi

c++ - 为什么需要在分配给 C++ 常量的值之后附加 L 或 F?

转载 作者:IT老高 更新时间:2023-10-28 22:33:26 25 4
gpt4 key购买 nike

我在网上查看了很多地方,但似乎找不到一个很好的解释来说明为什么我们应该在分配给 C++ 常量的值之后附加 F 或 L。例如:

const long double MYCONSTANT = 3.0000000L;

谁能解释为什么这是必要的?类型声明不是暗示分配给 MYCONSTANT 的值是长 double 吗?上面这行和

有什么区别
const long double MYCONSTANT = 3.0000000;        // no 'L' appended

哇!

最佳答案

浮点常量的类型为 double默认情况下在 C++ 中。由于 long doubledouble 更精确,当 long double 时,您可能会丢失有效数字常量转换为 double .要处理这些常量,您需要使用 L后缀维护long double精确。例如,

long double x = 8.99999999999999999;
long double y = 8.99999999999999999L;
std::cout.precision(100);
std::cout << "x=" << x << "\n";
std::cout << "y=" << y << "\n";

此代码在我的系统上的输出,其中 double是 64 位和 long double 96,是

x=9
y=8.9999999999999999895916591441391574335284531116485595703125

这里发生的是 x在赋值之前被四舍五入,因为常量被隐式转换为 double , 和 8.99999999999999999不能表示为 64 位 float 。 (请注意,long double 的表示也不完全精确。9 的第一个字符串之后的所有数字都是尝试使用 96 个二进制位尽可能接近十进制数 8.99999999999999999。)

在您的示例中,不需要 L常数,因为 3.0可以精确地表示为 doublelong double . double常量值隐式转换为 long double没有任何精度损失。

F 的情况不是那么明显。正如 Zan Lynx 指出的那样,它可以帮助重载。我不确定,但它也可以避免一些细微的舍入错误(即,编码为 float 可能会产生与编码为 double 然后舍入为 float 不同的结果)。

关于c++ - 为什么需要在分配给 C++ 常量的值之后附加 L 或 F?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com