标签:put 收集 can line color tps scanf htm 0.00
1、多用double少用float
double的输入与输出:(注意占位符:scanf中是%lf,printf中是%f)
1 double x; 2 scanf("%lf",&x); 3 printf("%f,x);
2、判断浮点数大于0/小于0/等于0
使用sgn(x):
1 #define EPS (1e-8) 2 inline int sgn(double x){ 3 return (x > EPS) - (x < -EPS); 4 }
3、判断两个浮点数大小关系
使用sgn(x-y)与0的关系判断即可。
4、连乘时采用 x1*x2*x3...*xn = exp(ln(x1*x2*x3...*xn)) = exp(ln(x1)+ln(x2)+ln(x3)+...+ln(xn)) 来计算
5、若开方的数是负数那么sqrt会返回奇怪的值,所以在此前最好先进行判断(毕竟浮点数有坑)
1 inline double mysqrt(double x){ 2 return sqrt(max(0.0,x)); 3 }
6、输出时也要注意免得输出类似-0.00000的结果
主要参考:
2、浮点数相关的陷阱
标签:put 收集 can line color tps scanf htm 0.00
原文地址:http://www.cnblogs.com/scidylanpno/p/6770332.html