当前位置:  开发笔记 > 小程序 > 正文

haskell浮点精度

如何解决《haskell浮点精度》经验,为你挑选了1个好方法。

我写了一个小程序来找到点(x,y)相对于由点(px,py)定义的线和与x轴(在笛卡尔坐标系中)的角度(度)相关的位置.

toRadian deg = deg * (pi / 180)

lineSlope deg = tan $ toRadian deg

lineYintercept (x,y) deg = y - (x * lineSlope deg)

relativePointPosition (px,py) deg (x,y)
    | s < 0 && deg>=0 && deg<90 = "Left"
    | s < 0 && deg>=90 && deg<180 = "Left"
    | s < 0 && deg>=180 && deg<270 = "Right"
    | s < 0 && deg>=270 && deg<360 = "Right"
    | s > 0 && deg>=0 && deg<90 = "Right"
    | s > 0 && deg>=90 && deg<180 = "Right"
    | s > 0 && deg>=180 && deg<270 = "Left"
    | s > 0 && deg>=270 && deg<360 = "Left"
    | s > 0 && deg==360 = "Right"
    | s < 0 && deg==360 = "Left"
    | otherwise = "On the line"
    where s = lineSlope deg * x + lineYintercept (px,py) deg -  y

它对于远离线的点非常有效,但对于接近或在线上的点不太好.如何提高准确度?



1> sth..:

棕褐色(90°)未定义,因此提高精度并不能真正帮助您.由于浮点数的性质(它是圆形的并且不能精确地表示π/ 2),调用tan(deg * pi / 180)将给出非常大或非常小的数字,这取决于π/ 2的哪一侧的值被舍入.

确切的结果是NaN,但这也无济于事.您将不得不单独处理这些有问题的情况,或使用不具有此类"特殊"情况的其他算法.


呃,是吗?如果数学不起作用,你的程序也不会.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有