代码之家  ›  专栏  ›  技术社区  ›  Aaron

SQL Server trig函数引发无效的浮点操作

  •  1
  • Aaron  · 技术社区  · 6 年前

    我用合法的Lat/Long值调用这个函数来计算两点之间的距离。它对我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函数,而不是原生的sqlserver地理类型。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Aaron    6 年前

    该死的,看起来像是混合了一些7位数的小数位值和其他6位数的小数位值,导致COS函数被四舍五入为1,然后因为1超出范围而炸毁了整个ACOS函数?

    通过将所有的输入值减少到6位数,似乎完全解决了这个问题。