[OpenJDK 2D-Dev] More incompatibilities

Roman Kennke roman.kennke at aicas.com
Tue Mar 3 20:27:46 UTC 2009


Hi Jim,

> I was aware that the code was playing with overflow fire when I ported 
> it a while back.  I figured the real fix was to eventually switch to 
> float instead, as per your last suggestion - at least for the line 
> widening code.  Any takers?

Yeah I can do this, but it will surely take some time. In the meantime,
should we push the proposed fix as an interim solution?

/Roman

> 
> 			...jim
> 
> Roman Kennke wrote:
> > Hi there,
> > 
> >> 4. StrokeShapeTest: createStrokedShape() behaves differently.
> > 
> > It turns out that there is an arithmetic overflow here. The pisces
> > stroker does a stupid thing here. First it initializes the
> > scaledLineWidth like this:
> > 
> >         this.scaledLineWidth2 = ((long)transform.m00*lineWidth2);
> > 
> > which is infact wrong, because in fixed point arithmetics you need to
> > apply >> 16, because the decimal moves.
> > 
> > However, in another place it uses this factor like this:
> > 
> >                 dx = (int)( (ly*scaledLineWidth2)/ilen >> 16);
> >                 dy = (int)(-(lx*scaledLineWidth2)/ilen >> 16);
> > 
> > which makes it ok in the end. The only problem is, that we start with an
> > incredibly large number, then multiply another incredibly large number
> > and _after_ that (when the overflow already occured) do the >> 16. The
> > patch moves the >> 16 to the initialization of scaledLineWidth, which
> > makes it clearer, more correct and even a tad faster, because we do the
> > second calculation at least 2x.
> > 
> > Of course, the real fix here would be to turn the whole implementation
> > into floating point. This particular testcase is fixed by this patch,
> > and the 'range of correct behaviour' is much large now, but if you deal
> > with very large numbers in your shapes, then you will get trouble again.
> > 
> > /Roman
> > 
-- 
Dipl.-Inform. (FH) Roman Kennke, Software Engineer, http://kennke.org
aicas Allerton Interworks Computer Automated Systems GmbH
Haid-und-Neu-Straße 18 * D-76131 Karlsruhe * Germany
http://www.aicas.com   * Tel: +49-721-663 968-48
USt-Id: DE216375633, Handelsregister HRB 109481, AG Karlsruhe
Geschäftsführer: Dr. James J. Hunt





More information about the 2d-dev mailing list