2012-06-20 108 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 
      )