2012-06-20 61 views
3

我有一个SQL查询的问题,我已经将范围缩小到下面的代码无效的浮点运算发生

SELECT ACOS((SIN(PI()* 52.9519918465976/180)*SIN(PI()* 52.9519918465976/180))+(COS(PI()* 52.9519918465976/180)*cos(PI()* 52.9519918465976/180)*COS(PI()* -1.14304013581239/180-PI()* -1.14304013581239/180))) AS test 

我收到以下错误消息“出现无效的浮点运算”

可以看看问题是什么?

在此先感谢

+0

你有没有尝试过把表达式分解成它的组件? – ChrisF

回答

5

你的结果ACOS()是大于1这是不可能的。

这是因为浮点不准确。例如它可能是1.00000001。稍微低于1这样的作品:

SELECT ACOS( 
      (SIN(PI()* 52.9519918465976/180.0)* SIN(PI()* 52.9519918465976/180.0)) 
      + (COS(PI()* 52.9519918465976/180)*cos(PI()* 52.9519918465976/180.0)*COS(PI()* -1.14304013581239/180.0-PI()* -1.14304013581239/180.0)) 
      - 0.0000001 
      )