numerical problems in rotation creation
---------------------------------------

                 Key: MATH-639
                 URL: https://issues.apache.org/jira/browse/MATH-639
             Project: Commons Math
          Issue Type: Bug
    Affects Versions: 2.2
         Environment: Linux
            Reporter: Luc Maisonobe
            Assignee: Luc Maisonobe
             Fix For: 3.0


building a rotation from the following vector pairs leads to NaN:
u1 = -4921140.837095533, -2.1512094250440013E7, -890093.279426377
u2 = -2.7238580938724895E9, -2.169664921341876E9, 6.749688708885301E10
v1 = 1, 0, 0
v2 = 0, 0, 1

The constructor first changes the (v1, v2) pair into (v1', v2') ensuring the 
following scalar products hold:
 <v1'|v1'> == <u1|u1>
 <v2'|v2'> == <u2|u2>
 <u1 |u2>  == <v1'|v2'>

Once the (v1', v2') pair has been computed, we compute the cross product:
  k = (v1' - u1)^(v2' - u2)

and the scalar product:
  c = <k | (u1^u2)>

By construction, c is positive or null and the quaternion axis we want to build 
is q = k/[2*sqrt(c)].
c should be null only if some of the vectors are aligned, and this is dealt 
with later in the algorithm.

However, there are numerical problems with the vector above with the way these 
computations are done, as shown
by the following comparisons, showing the result we get from our Java code and 
the result we get from manual
computation with the same formulas but with enhanced precision:

commons math:   k = 38514476.5,            -84.,                           
-1168590144
high precision: k = 38514410.36093388...,  -0.374075245201180409222711..., 
-1168590152.10599715208...

and it becomes worse when computing c because the vectors are almost orthogonal 
to each other, hence inducing additional cancellations. We get:
commons math    c = -1.2397173627587605E20
high precision: c =  558382746168463196.7079627...

We have lost ALL significant digits in cancellations, and even the sign is 
wrong!


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to