* src/base/ftcalc.c /* FT_SqrtFixed */: Fix defunct overflow.
This commit is contained in:
parent
d7b63a966b
commit
babe6af167
|
@ -917,17 +917,18 @@
|
||||||
|
|
||||||
/* documentation is in ftcalc.h */
|
/* documentation is in ftcalc.h */
|
||||||
|
|
||||||
/* Algorithm and code by Christophe Meessen (1993). */
|
/* Algorithm and code by Christophe Meessen (1993) */
|
||||||
|
/* with overflow fixed. */
|
||||||
FT_BASE_DEF( FT_UInt32 )
|
FT_BASE_DEF( FT_UInt32 )
|
||||||
FT_SqrtFixed( FT_UInt32 r )
|
FT_SqrtFixed( FT_UInt32 v )
|
||||||
{
|
{
|
||||||
FT_UInt32 t, q, b;
|
FT_UInt32 r = v >> 1;
|
||||||
|
FT_UInt32 q = ( v & 1 ) << 15;
|
||||||
|
FT_UInt32 b = 0x20000000;
|
||||||
|
FT_UInt32 t;
|
||||||
|
|
||||||
|
|
||||||
q = 0;
|
do
|
||||||
|
|
||||||
b = 0x40000000;
|
|
||||||
while ( b > 0x40 )
|
|
||||||
{
|
{
|
||||||
t = q + b;
|
t = q + b;
|
||||||
if ( r >= t )
|
if ( r >= t )
|
||||||
|
@ -938,8 +939,9 @@
|
||||||
r <<= 1;
|
r <<= 1;
|
||||||
b >>= 1;
|
b >>= 1;
|
||||||
}
|
}
|
||||||
|
while ( b > 0x20 );
|
||||||
|
|
||||||
return q >> 8;
|
return q >> 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* 0 */
|
#endif /* 0 */
|
||||||
|
|
Loading…
Reference in New Issue