/* Bring in the arg and renormalize if it is denormal. */
qmovz( x, xx );
m = xx[1]; /* local long word exponent */ /* if(m==0) m-=normlz(xx);
*/ /* Divide exponent by 2 */
m -= EXPONE - 1;
exp = (QELT) ( (m / 2) + (EXPONE - 1) );
/* Adjust if exponent odd */ if( (m & 1) != 0 )
{ if( m > 0 )
exp += 1;
shdn1( xx );
}
qclear( sq );
sq[NQ] = 0;
qclear( num );
num[NQ] = 0;
n = WORDSIZE / 2;
for( j=0; j<2*NQ-6; j++ )
{ /* bring in next word of arg */ if( j <= NQ-3 )
num[NQ] = xx[j+3]; /* Do additional bit on last outer loop, for roundoff. */ if( j == 2*NQ-7 )
n = WORDSIZE / 2 + 1; for( i=0; i<n; i++ )
{ /* Next 2 bits of arg */
shup1( num );
shup1( num ); /* Shift up answer */
shup1( sq ); /* Make trial divisor */ for( k=0; k<=NQ; k++ )
temp[k] = sq[k];
shup1( temp );
addm( rndbit, temp ); /* Subtract and insert answer bit if it goes in */ if( cmpm( temp, num ) <= 0 )
{
subm( temp, num );
sq[NQ-1] |= 1;
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.