diff --git a/ChangeLog b/ChangeLog index 8403ab963..a22cc880a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-02-23 Alexei Podtelezhnikov + + [base] Fix commit ab02d9e8. + + * src/base/ftbbox.c (BBox_Cubic_Check): Change scaling to msb of 22. + 2013-02-19 Alexei Podtelezhnikov [base] New bisecting BBox_Cubic_Check (disabled). diff --git a/src/base/ftbbox.c b/src/base/ftbbox.c index 8a240ef29..64f06f469 100644 --- a/src/base/ftbbox.c +++ b/src/base/ftbbox.c @@ -412,11 +412,11 @@ /* These values must fit into a single 16.16 value. */ /* */ /* We normalize a, b, and c to `8.16' fixed-point values to ensure */ - /* that its product is held in a `16.16' value. Necessarily, */ - /* we need to shift `a', `b', and `c' so that the most significant */ - /* bit of their absolute values is at _most_ at position 23. */ + /* that their product is held in a `16.16' value including the sign. */ + /* Necessarily, we need to shift `a', `b', and `c' so that the most */ + /* significant bit of their absolute values is at position 22. */ /* */ - /* This also means that we are using 24 bits of precision to compute */ + /* This also means that we are using 23 bits of precision to compute */ /* the zeros, independently of the range of the original polynomial */ /* coefficients. */ /* */ @@ -427,11 +427,11 @@ shift = FT_MSB( FT_ABS( a ) | FT_ABS( b ) | FT_ABS( c ) ); - if ( shift > 23 ) + if ( shift > 22 ) { - shift -= 23; + shift -= 22; - /* this loses some bits of precision, but we use 24 of them */ + /* this loses some bits of precision, but we use 23 of them */ /* for the computation anyway */ a >>= shift; b >>= shift; @@ -439,7 +439,7 @@ } else { - shift = 23 - shift; + shift = 22 - shift; a <<= shift; b <<= shift;