求助大佬,为什么使用以下代码时,部分数据会与标准数据存在0.01的误差?
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,maxtop;
float a[105][105],ans[105];
int main(){
//scanf("%d",&n);
cin>>n;
//for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) scanf("%f",&a[i][j]);//读入
for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) cin>>a[i][j];
for(int s=1;s<=n-1;s++){
for(int i=s;i<=n-1;i++)
if(a[i][1]>a[i+1][1]) maxtop=i;
else maxtop=i+1;//寻主
for(int j=s;j<=n+1;j++)
swap(a[s][j],a[maxtop][j]);//选主
for(int j=n+1;j>=s;j--)
a[s][j]=a[s][j]/a[s][s];//同除
for(int i=s+1;i<=n;i++)
for(int j=n+1;j>=s;j--)
a[i][j]=a[i][j]-a[i][s]*a[s][j];//消元
if(a[s+1][s+1]==0){
//printf("No Solution");//判解
cout<<"No Solution";
return 0;
}
}
ans[1]=a[n][n+1]/a[n][n];
int t=2;
int k=1;
for(int s=n-1;s>=1;s--){
ans[t]=a[s][n+1];
for(int j=n;j>=s+1;j--){
ans[t]=ans[t]-ans[k]*a[s][n-k+1];//回代求解
k++;
}
t++;
k=1;
}
for(int i=n;i>=1;i--) //printf("%.2f\n",ans[i]);
cout<<setprecision(2)<<fixed<<ans[i]<<endl;
/* for(int i=1;i<=n;i++){
for(int j=1;j<=n+1;j++) printf("%.2f\n",a[i][j]);//调试输出
printf("\n");
}*/
return 0;
}