C++ c++;浮点数存储中的精度问题

C++ c++;浮点数存储中的精度问题,c++,C++,我在做一些数学计算。 我正在失去准确性。但我需要极高的精确度。 然后我用下面给出的代码检查精度问题。 有什么办法可以达到精度吗 #include <iostream> #include <stdlib.h> #include <cstdio> #include <sstream> #include <iomanip> using namespace std; int main(int argc,char** arvx) {

我在做一些数学计算。 我正在失去准确性。但我需要极高的精确度。 然后我用下面给出的代码检查精度问题。 有什么办法可以达到精度吗

#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;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,字符**arvx)
{
浮点数f=1.00000001;
c组cout++

仅支持小数点后的6位数字

float f = 1.000001;
如果您想要更真实的计算,请使用double

,如果您真正想要精确表示这些类型的数字(即,小数点以外的许多地方的小数成分非常小),则像
float
或更精确的
double
之类的浮点类型可能仍然无法提供您在所有情况下都要查找的精确结果。浮点类型只能使用小分数分量近似某些值


你可能需要使用一些高精度的定点C++类型来精确地表示你的值中的非常小的分数,并且当你对这些数字进行数学运算时得到精确的计算结果。下面的问题/答案可以为你提供一些有用的指针:

第1步是不使用<代码>浮点
。使用
双精度
,它大约有16位精度,应该是存储实数的首选。您需要超过16位有效数字吗?(可能boost::multiprecision也不错)在使用double时,1.00000001显示为1。0000000099999999392@KiranJose“小数点后的6位数字”是不正确的。“6位十进制数字的总精度”将更像它,但小数点后,这可以采取更大的形式,因为你正在划分,而不是乘法。考虑例如2 ^ - 10。
float f = 1.000001;