gpt4 book ai didi

Haskell 浮点精度

转载 作者:行者123 更新时间:2023-12-02 09:42:48 24 4
gpt4 key购买 nike

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

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

它对于远离直线的点效果非常好,但对于靠近或在线上的点则效果不佳。如何提高准确率?

最佳答案

tan(90°) 未定义,因此提高精度并不能真正帮助您。由于 float 的性质(四舍五入且无法准确表示 π/2),调用 tan(deg * pi/180) 将给出一个非常大或非常小的数字,具体取决于 π/2 的哪一侧对值进行舍入。

确切的结果将是NaN,但这也对您没有多大帮助。您必须单独处理这些有问题的情况,或者使用不存在这种“异常(exception)”情况的不同算法。

关于Haskell 浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com