浮点数计算问题

来源:互联网 发布:淘宝pc与手机尺寸 编辑:程序博客网 时间:2024/05/17 16:02

关于二位平面上【点】的一些函数:

acos()函数;

返回的是一个数值的反余弦弧度值。
输出:(0,pi)
常用的π=acos(-1.0).


atan()函数;

atan可返回数字的反正切值。
输 入: (-∞.+∞)
输 出: (-pi/2,pi/2)

atan2()函数;

atan2 返回的是方位角。
C 语言里 double atan2(double y,double x) 返回的是原点至点(x,y)的方位角,即与 x 轴的夹角。
C 函数允许 x、y 同时为零。
与 atan 的不同
atan2 比 atan 稳定。
如:atan(y/x),当 y 远远大于 x 时,计算结果是不稳定的。
atan2(y,x)的做法:
当 x 的绝对值比 y 的绝对值大时使用 atan(y/x);
反之使用 atan(x/y)。这样就保证了数值稳定性。


ACM中的浮点数精度处理

具体可以参考:http://www.cnblogs.com/crazyacking/p/4668471.html
有以下9个注意点,总结很不错啊!推荐!
1.浮点数为啥会有精度问题:
2. eps
3. eps带来的函数越界
4. 输出陷阱I
5. 输出陷阱II
6. 范围越界
7. 关于set<T>
8. 输入值波动过大
9. 一些建议


浮点数判断大小的写法:

补充,sgn()函数;

传统意义      修正写法1              修正写法2
a == b        sgn(a - b) == 0        fabs(a – b) < eps
a != b        sgn(a - b) != 0        fabs(a – b) > eps
a <  b        sgn(a - b) < 0         a – b < -eps
a <= b        sgn(a - b) <= 0        a – b < eps
a >  b        sgn(a - b) > 0         a – b > eps
a >= b        sgn(a - b) >= 0        a – b > -eps


0 0