PAT Advanced Level 2011 注意浮点数精度问题
来源:互联网 发布:广东省网络干部学院 编辑:程序博客网 时间:2024/06/11 10:30
链接:http://www.patest.cn/contests/pat-a-practise/1011
输入:
W1 T1 L1
W2 T2 L2
W3 T3 L3
输出:
[min(W1,T1,L1)*min(W2,T2,L2)*min(W2,T2,L2)*0.65-1]*2
【分析】这个题目是4个题目中的第一题,难点应该是浮点数的精度问题
#include<cstdio>#include<iostream>#define INF 1e-10using namespace std;double _max(double a,double b,double c){ double aa=max(a,b); aa=max(aa,c); return aa;}int main(){// freopen("in.txt","r",stdin); double a,b,c,tot=1; for(int i=0; i<3; i++) { if(i) printf(" "); scanf("%lf%lf%lf",&a,&b,&c); double aa=_max(a,b,c); tot*=aa; if(aa-a<INF&&aa-a>-INF) printf("W"); if(aa-b>-INF&&aa-b<INF) printf("T"); if(aa-c>-INF&&aa-c<INF) printf("L"); } tot=(tot*0.65-1)*2; printf(" %.2lf\n",tot+0.0005); return 0;}
这种方法由于中间步骤比较多,导致误差较大,最后tot+0.0005来弥补精度损失,另外如果是tot+0.005就会WA,1.3+0.005就会保留两位小数就会变成1.31,有了误差。
#include<cstdio>#include<iostream>#define INF 1e-10using namespace std;int main(){// freopen("in.txt","r",stdin); double a,b,c,tot=1; double x[3]; for(int i=0; i<3; i++) { scanf("%lf%lf%lf",&a,&b,&c); if(a>b&&a>c) { x[i]=a; printf("W "); } else if(b>a&&b>c) { x[i]=b; printf("T "); } else { x[i]=c; printf("L "); } } tot=(x[0]*x[1]*x[2]*0.65-1)*2; printf("%.2lf\n",tot); return 0;}
这种方法中间步骤较少,误差小,也可以AC
0 0
- PAT Advanced Level 2011 注意浮点数精度问题
- 浮点数计算注意精度问题
- 浮点数精度问题
- 浮点数精度问题
- 浮点数精度问题
- 浮点数的精度问题
- java 浮点数精度问题
- JAVA浮点数精度问题
- js浮点数精度问题
- 浮点数精度丢失问题
- Java浮点数精度问题
- 浮点数输入精度问题
- 浮点数精度问题处理
- ios 浮点数精度问题
- js浮点数精度问题
- js浮点数精度问题
- js浮点数精度问题
- JavaScript浮点数运算 -- 精度问题
- linux下安装交叉编译器
- android checkbox 未选中状态 已选中状态 替换成自己的图片
- Ubuntu环境下安装Qt
- phonegap-准备篇
- eclipse运行wordcount
- PAT Advanced Level 2011 注意浮点数精度问题
- 求1~n的欧拉函数
- Map学习日志
- elciple中创建Web工程
- Windows下合并tar分卷
- 浅谈C++中指针和引用的区别
- 数据库基本知识备忘录
- Java Printf 函数及其使用
- Win7升级成Win10后VMware安装CentOS不能联网的解决办法