[OpenJDK 2D-Dev] CubicCurve2D.solveCubic and containment/intersection bugs.

Jim Graham james.graham at oracle.com
Wed Jan 26 01:24:59 UTC 2011


Hi Denis,

You make a lot of local variables final - is that for performance?  Does 
it actually have any impact (I've only ever used final on a local 
variable when it was required for an anonymous inner class to work).

Line 1104, I though we were going to add a comment that clarified that 
the values we computed were actually p/3 and q/2.

Line 1123 - it has no bearing on the correctness, but logically I think 
this would read better as "eqn = Arrays.copyOf(eqn, 4)" since it is 
"saving eqn", but the way you wrote it looks like it is "saving res" 
(which happens to == eqn).

Line 1131 - {}

Line 1142 - that's a huge error allowance.  Do we really need that much?

Lines 1178 - 1180 - only used inside "num == 3" case?
Lines 1182,1183 - only used in "num == 3, critcount == 1" case?

Line 1182 - I don't understand why this is -1 or 1, why not solveEqn? 
Or is it because you only care about the sign of the function there?  Is 
it really that predictable?  Also, what about just using "-eqn[3]" as 
the "sign approximator"?  (Not helpful if eqn[3] == 0, but we wouldn't 
be here if that was the case.)

Line 1192 - this case ends up returning "1", but can't we enter here 
with 2 roots?  "critCount==1" can happen if there are 2 roots, no?

Line 1179 - isn't that already done in getRUB()?  (And see my comment 
about eliminating the "max()")

Line 1206 - I don't understand what this case is trying to accomplish?

Line 1219 - We can get here if "num == 2, critCount == 1" which means we 
may actually have 2 valid roots, no?

Line 1230 - could be declared on line 1233?

Line 1283 - move this just inside the while?  (And eliminate 1295?)

Line 1340 - M += 1 + ulp(M) would save a max operation and work as well, 
wouldn't it?

Line 1386 - It looks like you moved this function from below which just 
generates some unnecessary diffs - is there a reason for that?

			...jim

On 1/25/2011 3:45 PM, Denis Lila wrote:
>>  From that email on we started diving into the containment methods
>> instead of solveCubic and the email you refer to doesn't have a webrev
>> link to the code with your changes. Is there a final webrev for the
>> solveCubic changes?
>
> I made a webrev, along with 3 regression tests (2 for my previous 2 pushes
> and one for solveCubic):
> http://icedtea.classpath.org/~dlila/webrevs/cc2d/webrev/
>
> The regression test for solveCubic just tests the equation {0, 0, 1, 1}
> for which we used to find only 1 root. I thought about including a
> randomized stress test based your trySolve method that you sent a while
> ago, but I'm not a big fan of regression tests that have a small chance of
> failing even when nothing is wrong. What do you think about this?
>
> Regards,
> Denis.



More information about the 2d-dev mailing list