关于浮点数的精度问题
  • 板块学术版
  • 楼主OldVagrant
  • 当前回复18
  • 已保存回复18
  • 发布时间2022/7/12 19:52
  • 上次更新2023/10/27 20:47:49
查看原帖
关于浮点数的精度问题
438168
OldVagrant楼主2022/7/12 19:52

rt,为什么下面这份代码在运行时会出现一些很大的bug,比如最后那个if里面mp[now]只有少数几个的值是正确的的,是double的精度问题?但是我本地 #define double long double了也没用(

map<double,int> mp;
map<double,int>::iterator it;
int n=read(),m=read(),tot=0;
double d=100.0000000/n,del=d-(int)d,now=del;
while(now<0.5) now+=del;
mp[now]=0;
while(now>0) now=del,mp.insert(make_pair(now,++tot)); 
for(int i=1,x;i<=m;i++) x=read(),a[i].percent=x*100.0/n;
for(int i=1;i<=m;i++){
	now=a[i].percent-floor(a[i].percent),ans+=(int)a[i].percent;
	if(now>=0.5){
		a[i].need=0;
			continue;
	}it=mp.find(now),a[i].need=(*it).second;
	if(a[i].percent>d){
cout<<now<<' '<<mp[now]<<' '<<a[i].need<<endl;
	}
}
2022/7/12 19:52
加载中...