sub_ext.c

来自「操作系统源代码」· C语言 代码 · 共 54 行

C
54
字号
/*  (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.  See the copyright notice in the ACK home directory, in the file "Copyright".*//* $Header: sub_ext.c,v 1.6 93/01/05 12:06:40 ceriel Exp $ *//*	SUBTRACT 2 EXTENDED FORMAT NUMBERS*/#include "FP_types.h"voidsub_ext(e1,e2)EXTEND	*e1,*e2;{	if ((e2->m1 | e2->m2) == 0L) {		return;	}	if ((e1->m1 | e1->m2) == 0L) {		*e1 = *e2;		e1->sign = e2->sign ? 0 : 1;		return;	}	sft_ext(e1, e2);	if (e1->sign != e2->sign) {		/* e1 - e2 = e1 + (-e2) */		if (b64_add(&e1->mantissa,&e2->mantissa)) { /* addition carry */                	b64_rsft(&e1->mantissa);      /* shift mantissa one bit RIGHT */                	e1->m1 |= 0x80000000L;  /* set max bit  */                	e1->exp++;              /* increase the exponent */        	}	}        else if (e2->m1 > e1->m1 ||                 (e2->m1 == e1->m1 && e2->m2 > e1->m2)) {		/*	abs(e2) > abs(e1) */		if (e1->m2 > e2->m2) {			e2->m1 -= 1;	/* carry in */		}		e2->m1 -= e1->m1;		e2->m2 -= e1->m2;		*e1 = *e2;		e1->sign = e2->sign ? 0 : 1;	}	else {		if (e2->m2 > e1->m2)			e1->m1 -= 1;	/* carry in */		e1->m1 -= e2->m1;		e1->m2 -= e2->m2;	}	nrm_ext(e1);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?