打印长双变量的所有十进制数字
Print all decimal digits of long double variable
我发现我的机器上的double
类型对应于这篇维基百科文章,long double
对应于此文本:x86扩展精度格式。
这就是为什么floor(52/log2(10))
或 15 位数字的double
应该是正确的,floor(63/log2(10))
或 19 位数字的long double
是可信的。
代码:
int main()
{
double d=0.1;
long double ld=0.1;
std::cout.precision(19);
std::cout.setf(std::ios_base::scientific);
std::cout << d << std::endl;
std::cout << ld << std::endl;
return 0;
}
给出输出:
1.0000000000000000555e-01
1.0000000000000000555e-01
如果我们将cout.precision
设置为 16,则输出将为:
1.0000000000000001e-01
1.0000000000000001e-01
没关系,第一个输出中 double
的第 17 位数字和第二个输出中第 16 位double
位数字是不正确的。但是为什么对long double
不正确?有没有办法获得long double
变量的所有 19 个正确数字?
如果我尝试printf("%.19Len",ld);
长双倍,我会得到完全相同的结果。
我使用 OpenSUSE 12.1 和 g++ 4.6.2。
0.1
文字常量不是长双精度,它很可能是双精度数。
您可能希望使用 初始化ld
long double ld = (long double) 1.0 / (long double) 10.0;
因此,除法涉及两个长双操作数,因此希望在长双精度中完成(我不确定,您必须仔细检查适当的C++标准)。
您可能希望使用支持最新标准的 GCC 进行编译。对于 GCC 4.7,我建议使用 g++ -Wall -std=c++11
进行编译,但对于您的 4.6,您可能需要说-std=c++0x
相关文章:
- 计算十进制 c++ 之后的数字
- 如何计算整数的十进制数字?
- Unicode Chars显示为十进制数字而不是符号,我该如何修复
- 根据参数设置十进制数字
- 将二进制号转换为十进制数字的代码
- 使用动态比特斯转换十进制数字
- 此代码中 * 1233 >> 12 计算十进制数字背后的数学原理是什么
- 仅使用char将八分音号码转换为十进制数字
- 将十进制数字截断为最接近的4个小数和断言
- 打印长双变量的所有十进制数字
- 十进制数字的区域设置感知编辑控件子类化(格式[sign][xxx..][decimal separator][yy.])
- 将双精度转换为精度超过 5 位十进制数字的字符串
- 将双十进制数字转换为HEX字符串
- 以十进制打印变量的地址
- 如何确定浮点数中的最后一个非零十进制数字
- 如何在C++中显示数字变量
- 编写一个宏is_digit,如果其参数是十进制数字,则返回true
- 以 32 个十进制数字分析浮点数/双精度
- 如何计算出大双精度中有多少个十进制数字
- 8 字节如何容纳 302 个十进制数字?(欧拉挑战16)