gpt4 book ai didi

c++ - 为什么 MSVC++ 需要 std::setprecision 来启用 std::hexfloat 的全精度输出?

转载 作者:行者123 更新时间:2023-11-28 04:26:08 26 4
gpt4 key购买 nike

据我所知,以下行是将十六进制 double 输出到完全精度所需的全部内容:

std::cout << std::hexfloat << yourDouble << std::endl;

但是在 Visual Studio 17 中使用 MSVC++ 这只会打印 double 到 6 个十六进制数字。查看我的代码(为清楚起见被截断):

std::ifstream cacheF(pToFile, std::ios::in);
if (!cacheF.is_open()) {
std::cerr << "Could not open " << pToFile << "!" << std::endl;
return 1;
}

bool readSuccess = true;
unsigned long long sumBegin, cached[2];
double previousTime;
readSuccess = readSuccess && (cacheF >> std::dec >> sumBegin);
readSuccess = readSuccess && (cacheF >> std::hexfloat >> previousTime);
for (int i = 0; i < 2; i++) readSuccess = readSuccess && (cacheF >> std::hex >> cached[i]);

cacheF.close();

if (!readSuccess) {
std::cerr << "Cache reload failed due to improper file formatting!" << std::endl;
}

std::cout << std::hexfloat << previousTime << std::endl;
std::cout << std::setprecision(13) << std::hexfloat << previousTime << std::endl;

输入文件如下所示:

1045644800006
0x1.567be0370cdc8p+7
C6CCFEDA2563B0D1
5E3492440B4BE8B2

输出是:

0x1.567be0p+7
0x1.567be0370cdc8p+7

自从我上次使用 GCC 尝试此操作已经有一段时间了,但如果我没记错的话,它无需 setprecision 即可生成完整的 double 输出。任何人都可以确认这是否是 MSVC++ 特定的行为,如果是为什么?

最佳答案

因为 hexfloat 输出应该是 ignore precision并输出完整的值,这将是一个编译器错误。

关于c++ - 为什么 MSVC++ 需要 std::setprecision 来启用 std::hexfloat 的全精度输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54273562/

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