gpt4 book ai didi

c++ - 输出精度高于 double

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

我正在打印 C++ 程序中的一些数据,以供 ParaView 处理/可视化,但我遇到了 float 问题。 Paraview 支持 Float32 和 Float64 两种数据类型。 Float64 相当于典型限制 +/-1.7e +/- 308 的 double。但是,我的代码正在打印像 6.5e-318 这样的数字。这在读取数据时会在 ParaView 中抛出错误。我已经验证将这些小数字四舍五入为零会使 ParaView 中的错误消失。我不确定为什么我有如此“高精度”的输出,可能是因为一些数字的存储精度高于 double 。例如,以下代码在我的系统上重现了相同的行为:

#include <iostream>
int main(void)
{
const double var1 = 1.0e-318, var2 = 1.5e-318;
std::cout << 1.0e-318 << std::endl;
std::cout << var1 << std::endl;
std::cout << var1 - var2 << std::endl;
std::cout.setf(std::ios_base::fixed | std::ios_base::scientific, std::ios_base::floatfield);
std::cout << 1.0e-318 << std::endl;
std::cout << var1 << std::endl;
std::cout << var1 - var2 << std::endl;

return 0;
}

我的输出是:

9.99999e-319
9.99999e-319
-4.99999e-319
9.99999e-319
9.99999e-319
-4.99999e-319

我的系统是 Mac OS X Snow Leopard,我使用 GCC 4.2 和 GCC 4.6 测试了上面的内容,标记为 -m32-m64- ffloat-store(不确定这是否有用)。

实际上我的输出很好,但 ParaView 就不行了。我只想知道为什么我有这种差异。我很可能会忽略与可能很重要的 float 相关的内容。你能给我一些关于 double 输出/数值行为的线索吗?

最佳答案

次正规数,即分数中具有最小可能指数和前导零的数字,can be smaller than 1E-308, down to 1E-324 .您或许可以使用 std::numeric_limits 过滤掉它们。

关于c++ - 输出精度高于 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611628/

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