1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /*
- (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
- See the copyright notice in the ACK home directory, in the file "Copyright".
- */
- /* $Id$ */
- /********************************************************/
- /*
- NORMALIZE an EXTENDED FORMAT NUMBER
- */
- /********************************************************/
- #include "FP_shift.h"
- #include "FP_types.h"
- void
- nrm_ext(e1)
- EXTEND *e1;
- {
- /* we assume that the mantissa != 0 */
- /* if it is then just return */
- /* to let it be a problem elsewhere */
- /* THAT IS, The exponent is not set to */
- /* zero. If we don't test here an */
- /* infinite loop is generated when */
- /* mantissa is zero */
- if ((e1->m1 | e1->m2) == 0L)
- return;
- /* if top word is zero mov low word */
- /* to top word, adjust exponent value */
- if (e1->m1 == 0L) {
- e1->m1 = e1->m2;
- e1->m2 = 0L;
- e1->exp -= 32;
- }
- if ((e1->m1 & NORMBIT) == 0) {
- unsigned long l = ((unsigned long)NORMBIT >> 1);
- int cnt = -1;
- while (! (l & e1->m1)) {
- l >>= 1;
- cnt--;
- }
- e1->exp += cnt;
- b64_sft(&(e1->mantissa), cnt);
- }
- }
|