[求助]一个关于2.1/1.9和1.9/2.1的问题
今天遇到这样一个问题
#include<iostream>
#include<iomanip>
#include<cstring>
using namespace std;
void main()
{
int i,n=0;
double x=1,y1=2.1/1.9,y2=1.9/2.1;
for(i=1;i<22;i++)
x=x*y1;
while(x!=1.0)
{
x*=y2;
n++;
}
cout<<n<<endl;
}
输出结果为21.
实验证明当将所有的double改成long double时,结果还是21
但是改成float时就会死循环。
我觉得是和机器内的浮点数的最多小数位数有关。但是不甚理解
请大侠们指点