首页 > 代码库 > [ACM]计算几何_浮点数相关

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

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]计算几何_浮点数相关