码迷,mamicode.com
首页 > 其他好文 > 详细

[ACM]计算几何_浮点数相关

时间:2017-04-26 20:31:20      阅读:214      评论:0      收藏:0      [点我收藏+]

标签: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的结果

 

 

 


主要参考:

1、IO/ACM中来自浮点数的陷阱(收集向)

2、浮点数相关的陷阱

[ACM]计算几何_浮点数相关

标签:put   收集   can   line   color   tps   scanf   htm   0.00   

原文地址:http://www.cnblogs.com/scidylanpno/p/6770332.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!