SQL Server触发函数抛出无效的浮点操作

时间:2018-09-12 22:19:26

标签: sql-server floating-point trigonometry

我正在使用合法的纬度/经度值调用此函数,以尝试计算两点之间的距离。对于我所有点的99.99%来说,它运行得非常好,但是在这个特定点上,它崩溃了:

SELECT ACOS(SIN(-34.8821289 * PI() / 180) 
          * SIN(-34.882129 * PI() / 180) 
          + (COS(-34.8821289 * PI() / 180) 
           * COS(-34.882129 * PI() / 180) 
           * COS((150.7406616 - 150.740662) * PI() / 180))) / (PI() / 180) * 111.325

如何加强该功能来检查和处理此问题?

出于性能原因,我真的很想继续使用trig函数而不是本机SQL Server地理类型。

1 个答案:

答案 0 :(得分:0)

该死,看起来有些7位小数位的值与其他6位小数位的值的混合,导致COS函数四舍五入等于1,这随后使整个ACOS函数膨胀,因为1超出范围?

通过将我所有的输入值减小到6位似乎已经完全解决了这个问题。