对于以下程序:
#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
这是浮点类中的继承缺陷吗?有没有办法克服这个并进行适当的划分?是否有用于进行精确十进制运算的特殊数据类型?在我的例子中,我只是在做一些愚蠢或错误的事情吗?