Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输出精度高于双精度 我正在打印一些C++程序中的数据,用PARAVIEW处理/可视化,但是我的浮点号有问题。Paraview同时支持Float32和Float64数据类型。Float64相当于双精度,具有典型限值+/-1.7e+/-308。但是,我的代码是打印像6.5e-318这样的数字。这是在读取数据时在ParaView中抛出错误。我已经验证了将这些smalls数字四舍五入到零会使ParaView中的错误消失。我不确定为什么我会有如此“高精度”的输出,可能是因为有些数字的存储精度高于双精度。例如,以下代码在我的系统上复制了相同的行为: #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; }_C++_Double Precision_Floating Point Precision_Long Double_Paraview - Fatal编程技术网

输出精度高于双精度 我正在打印一些C++程序中的数据,用PARAVIEW处理/可视化,但是我的浮点号有问题。Paraview同时支持Float32和Float64数据类型。Float64相当于双精度,具有典型限值+/-1.7e+/-308。但是,我的代码是打印像6.5e-318这样的数字。这是在读取数据时在ParaView中抛出错误。我已经验证了将这些smalls数字四舍五入到零会使ParaView中的错误消失。我不确定为什么我会有如此“高精度”的输出,可能是因为有些数字的存储精度高于双精度。例如,以下代码在我的系统上复制了相同的行为: #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; }

输出精度高于双精度 我正在打印一些C++程序中的数据,用PARAVIEW处理/可视化,但是我的浮点号有问题。Paraview同时支持Float32和Float64数据类型。Float64相当于双精度,具有典型限值+/-1.7e+/-308。但是,我的代码是打印像6.5e-318这样的数字。这是在读取数据时在ParaView中抛出错误。我已经验证了将这些smalls数字四舍五入到零会使ParaView中的错误消失。我不确定为什么我会有如此“高精度”的输出,可能是因为有些数字的存储精度高于双精度。例如,以下代码在我的系统上复制了相同的行为: #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; },c++,double-precision,floating-point-precision,long-double,paraview,C++,Double Precision,Floating Point Precision,Long Double,Paraview,我的系统是一个Mac OS X雪豹,我用GCC 4.2和GCC 4.6测试了上面的代码,并使用标志-m32、-m64和-ffloat store(不确定这是否有用) 实际上,输出对我来说是好的,但对ParaView来说不是。我只是想知道为什么我会有这种差异。我很可能忽略了一些与浮点数相关的重要内容。你能给我一些关于双精度的输出/数值行为的线索吗?次正常数,即指数最小且分数中前导零的数。您可能可以使用std::numeric_limits将它们过滤掉。这里到底有什么问题?我看不出前后有什么区别。1

我的系统是一个Mac OS X雪豹,我用GCC 4.2和GCC 4.6测试了上面的代码,并使用标志
-m32
-m64
-ffloat store
(不确定这是否有用)


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

次正常数,即指数最小且分数中前导零的数。您可能可以使用std::numeric_limits将它们过滤掉。

这里到底有什么问题?我看不出前后有什么区别。1.0e-318实际上
9.9999E-319@GreenScape:问题似乎是正常双精度仅下降到~2.2e-308,而所有其他结果都是非规范化浮点,下降到~4.9e-324。很多程序似乎不理解非规范化浮点。是的,我认为这可能是解决方案,通过比较实际的双最小值和当前的数字。感谢您指出有关次正常数字的信息。
9.99999e-319
9.99999e-319
-4.99999e-319
9.99999e-319
9.99999e-319
-4.99999e-319