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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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]计算几何_浮点数相关的主要内容,如果未能解决你的问题,请参考以下文章

XDOJ_1060_浮点数

004_详解计算机各种语言浮点数运算会存在精度损失原因

内部格式为 GL_RGBA8 的纹理在片段着色器中显示为浮点数

OpenGL:为啥我不能将单个浮点数从顶点着色器传递到片段着色器?

float_浮点数存储结构

WEB02_Day04(下)-数据库相关SQL数据类型(整数浮点数字符串日期)