Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ocorreu uma operação de ponto flutuante inválida


Seu resultado em ACOS() é maior que 1 que não pode ser.

Isso é por causa da imprecisão do ponto flutuante. pode ser 1.00000001 por exemplo. Colocando um pouco abaixo de 1 funciona assim:
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
           )