|
|
|
@ -917,17 +917,18 @@ |
|
|
|
|
|
|
|
|
|
/* 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_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; |
|
|
|
|
|
|
|
|
|
b = 0x40000000; |
|
|
|
|
while ( b > 0x40 ) |
|
|
|
|
do |
|
|
|
|
{ |
|
|
|
|
t = q + b; |
|
|
|
|
if ( r >= t ) |
|
|
|
@ -938,8 +939,9 @@ |
|
|
|
|
r <<= 1; |
|
|
|
|
b >>= 1; |
|
|
|
|
} |
|
|
|
|
while ( b > 0x20 ); |
|
|
|
|
|
|
|
|
|
return q >> 8; |
|
|
|
|
return q >> 7; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif /* 0 */ |
|
|
|
|