gpt4 book ai didi

c++ - long double 输出的精度不正确。可能出了什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:19 25 4
gpt4 key购买 nike

我有一个 long double 常量,我将其设置为常量或非常量。它比我的测试工作站上的 long double 的精度(19 位)更长(40 位)。

当我打印出来时,它不再显示为 19 位精度,而是 16 位。

这是我正在测试的代码:

#include <iostream>
#include <iomanip>
#include <limits>
#include <cstdio>

int main ()
{
const long double constLog2 = 0.6931471805599453094172321214581765680755;
long double log2 = 0.6931471805599453094172321214581765680755;

std::cout << std::numeric_limits<long double>::digits10 + 1 << std::endl;
std::cout << "const via cout: " << std::setprecision(19) << constLog2 << std::endl;
std::cout << "non-const via cout: " << std::setprecision(19) << log2 << std::endl;
std::fprintf(stdout, "const via printf: %.19Lf\n", constLog2);
std::fprintf(stdout, "non-const via printf: %.19Lf\n", log2);

return 0;
}

编译:

$ g++ -Wall precisionTest.cpp

输出:

$ ./a.out
19
const via cout: 0.6931471805599452862
non-const via cout: 0.6931471805599452862
const via printf: 0.6931471805599452862
non-const via printf: 0.6931471805599452862

我期望 0.6931471805599453094 但得到的却是 0.6931471805599452862

19位精度被截成16位有什么原因吗?

这是我的环境:

$ gcc --version
i686-apple-darwin9-g++-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5490)

我在其他版本的 gcc 上看到了同样的问题,例如:

$ gcc --version
g++ (GCC) 3.4.6 20060404 (Red Hat 3.4.6-10)

我可以查看 NTL 或其他库,但我很好奇是什么原因造成的。感谢您的见解。

最佳答案

我得到这个输出:

19
const via cout: 0.6931471805599453094
non-const via cout: 0.6931471805599453094
const via printf: 0.6931471805599453094
non-const via printf: 0.6931471805599453094

但我使用的是长双字面量而不是双字面量:

const long double constLog2 = 0.6931471805599453094172321214581765680755L;
long double log2 = 0.6931471805599453094172321214581765680755L;

关于c++ - long double 输出的精度不正确。可能出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/684112/

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