c++ - 为什么 MSVC++ 需要 std::setprecision 才能使用 std::hexfloat 启用全精度输出?
问题描述
据我所知,以下行是将十六进制双精度输出到全精度所需的全部内容:
std::cout << std::hexfloat << yourDouble << std::endl;
但是在 Visual Studio 17 中使用 MSVC++ 只会打印一个双到 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 的情况下产生完整的双精度输出。谁能确认这是否是 MSVC++ 特定行为,如果是为什么?
解决方案
由于hexfloat
输出应该忽略精度并输出完整值,这将是一个编译器错误。
推荐阅读
- reactjs - 地图功能无法在 reactJS 应用程序中实现
- php - Laravel 5.4 在数据库中存储多对多关系
- linux - 如何在 linux 上将隐藏文件添加到我的 find 候选对象中
- vue.js - 对 Vue tsx 组件运行 Jest 测试
- xml - XMLTABLE 有原子值问题
- azure - 带有 azure 函数输出的流分析,错误写入批次
- python - 将 Python 中的文件复制到本地网络
- angularjs - 如何从http获取名称获取angularjs
- jenkins - 基于文件和特定分支构建的通用 webhook 触发器插件
- jquery - 如何使用 jQuery 过滤表格行