Aha!
I finally figured out what I was missing.
On 12/24/2010 4:43 PM, Denis Lila wrote:
Line 1133 - I don't understand why that term has -q in it. The above
link and the original code both computed essentially the arccos of
this
Basically, the negative comes in when you push all of the p terms back
inside the sqrt().
They had cos(3phi) = (3Q/2P)sqrt(-3/P)
= (q/p)*sqrt(-1/p)
= (-q/-p)*sqrt(-1/p)
= -q*(-1/p)*sqrt(-1/p)
= -q/(-p*sqrt(-p))
= -q/(sqrt(-p^3)
which is what you calculate, so we are not calculating the negative of
the angle after all - we are calculating the same angle using different
math. (Though it begs the question - is "-q/sqrt(-p^3)" more accurate
than "-q/(p*sqrt(-p)"? If p is < 1 then the cube is an even smaller
number, does that matter?)
Let X = (3q/2p)*sqrt(-3/p) where p and q are the ones from the wikipedia
article, not our code.
So, when we do ret[0] = t * cos(phi), that's:
= t * cos(acos(-X))
actually, it really was t*cos(acos(X)), not -X.
= t * cos(pi/3 - acos(X))
= t * cos(acos(X) - pi/3)
= t * cos(acos(X) - pi/3 - pi)
There was an error here in this step as well, this line should read:
= t * cos(acos(X) - pi/3 - 2pi)
= t * cos(acos(X) -7pi/3)
= nothing because this isn't our math... ;-)
I unfortunately don't have access to the icedtea servers at this moment,
so I attached a patch. I hope that's ok.
Have you updated the webrev yet?
...jim