存储浮点数时的c ++精度问题

时间:2014-03-04 05:21:06

标签: c++

我正在处理一些数学计算。 我正在失去精确度。但我需要极高的精确度。 然后我用下面给出的代码检查精度问题。 获得精度的任何解决方案?

#include <iostream>
#include <stdlib.h>
#include <cstdio>
#include <sstream>
#include <iomanip>
using namespace std;



int main(int argc,char** arvx)
{
   float f = 1.00000001;
   cout << "f: " <<std::setprecision(20)<< f <<endl;
   return 0;
}

输出是 f:1

2 个答案:

答案 0 :(得分:1)

如果你真的想要精确表示这些类型的数字(即,小数点之外的小部分非常小),那么浮点类型如float甚至是更精确的double可能仍然无法在所有情况下为您提供所需的确切结果。浮点类型只能使用小的小数分量来近似某些值。

您可能需要使用某种高精度定点C ++类型,以便在您的值中获得非常小分数的精确表示,并在您对此类数据执行数学运算时得到准确的计算结果数字。以下问题/答案可能会为您提供一些有用的指示:C++ fixed point library?

答案 1 :(得分:-1)

在c ++中

float f = 1.00000001;

小数点后仅支持6位数

float f = 1.000001;

如果你想要更多的实际计算,请使用double