Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

An invalid floating point operation occurred

I have a problem with an SQL query and i've narrowed it down to the following code

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

I get the following error message 'An invalid floating point operation occurred'

Can abody see what the issue is?

Thanks in advance

like image 604
James Privett Avatar asked Dec 19 '25 11:12

James Privett


2 Answers

Your result in ACOS() is bigger than 1 which can't be.

That is because of floating point inaccuracy. it could be 1.00000001 for instance. Putting it just a little below 1 works like this:

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
           ) 
like image 89
juergen d Avatar answered Dec 22 '25 16:12

juergen d


I'm using ACOS to calculate distances between geo points. The subtraction of '- 0.0000001' is enough to skew my results a bit. So I instead, but used a MIN function (as posted here by Craig) like this:

SELECT ACOS( 
        (SELECT MIN(x) FROM (VALUES (
             (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)) 
         ),(1)) AS value(x))
   ) 

This way ACOS of floats between 0 and 1 remain accurately calculated.

like image 40
Grits Avatar answered Dec 22 '25 16:12

Grits



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!