对于以下程序:C++不正确浮点算术
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
for (float a = 1.0; a < 10; a++)
cout << std::setprecision(30) << 1.0/a << endl;
return 0;
}
我收到以下输出:
1
0.5
0.333333333333333314829616256247
0.25
0.200000000000000011102230246252
0.166666666666666657414808128124
0.142857142857142849212692681249
0.125
0.111111111111111104943205418749
这绝对不是用于低处的数字右右,特别是相对于1/3,1/5,1/7和1/9。事情刚开始出错10^-16左右我期望看到更加类似:
1
0.5
0.333333333333333333333333333333
0.25
0.2
0.166666666666666666666666666666
0.142857142857142857142857142857
0.125
0.111111111111111111111111111111
这是浮点类中的继承缺陷吗?有没有办法克服这一点,并有适当的分工?有精确的小数运算有特殊的数据类型吗?在我的例子中,我只是做了一些愚蠢或错误的事情?
猜猜他们最大的精度是多少。 – chris
你认为浮点运算能做什么? –
好吧,我张贴在我的问题,他们最大在10^-16,我期望得到我最后列出的那种输出,虽然基于这些问题,我猜你们会指出我正在重载数据类型,我会因为问这个问题而感到愚蠢。 –