首页 > 代码库 > [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]计算几何_浮点数相关
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。