Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunti i sorgenti per Greenleaf Math Library (gfm.dll) git-svn-id: svn://10.65.10.50/trunk@10079 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			87 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/*int	_DivProcTrn(c,a,b,ida,idb,nid)
 | 
						|
 *
 | 
						|
 * ARGUMENT
 | 
						|
 *	DEC	*c;
 | 
						|
 *	unsigned a[], b[];
 | 
						|
 *	int	ida,idb,nid;
 | 
						|
 *
 | 
						|
 * DESCRIPTION
 | 
						|
 *	This routine divides one positive DEC structure	by another, setting
 | 
						|
 *  dst	= src1 / src2.
 | 
						|
 *
 | 
						|
 * SIDE	EFFECTS
 | 
						|
 *	None.
 | 
						|
 *
 | 
						|
 * RETURNS
 | 
						|
 *	GM_SUCCESS or error code.
 | 
						|
 *
 | 
						|
 * ALGORITHM
 | 
						|
 *	a = an * 10^-ad
 | 
						|
 *	b = bn * 10^-bd
 | 
						|
 *	c = a /	b
 | 
						|
 *	c = (10^p * an / bn) * 10^[-(ad	- bd + p)]
 | 
						|
 *	cn = 10^p * an / bn,   cd = ad - bd + p
 | 
						|
 *
 | 
						|
 * AUTHOR
 | 
						|
 *  Jared Levy	 05-JAN-1987  17:30
 | 
						|
 *   Copyright (C) 1987-1990 Greenleaf Software	Inc.  All rights reserved.
 | 
						|
 *
 | 
						|
 * MODIFICATIONS
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include "gm.h"
 | 
						|
#include "gmsystem.h"
 | 
						|
 | 
						|
int	_DivProcTrn(c,a,b,ida,idb,nid)
 | 
						|
DEC	*c;
 | 
						|
unsigned SHORT a[], b[];
 | 
						|
int	ida,idb,nid;
 | 
						|
{
 | 
						|
 | 
						|
	int		i, p;
 | 
						|
	unsigned SHORT	*cn, ad[5];
 | 
						|
 | 
						|
/*  sets c = a / b,
 | 
						|
    where a and	b are positive DEC numbers, and	the result is stored in	c */
 | 
						|
 | 
						|
	cn = c->dc.sl;
 | 
						|
 | 
						|
	p = nid	- (ida - idb);
 | 
						|
 | 
						|
	a[5] = 0;
 | 
						|
	a[6] = 0;
 | 
						|
	a[7] = 0;
 | 
						|
	a[8] = 0;
 | 
						|
	a[9] = 0;
 | 
						|
	a[10]= 0;
 | 
						|
	a[11]= 0;
 | 
						|
 | 
						|
	if (p<0)
 | 
						|
		_DivUnsArrByPwrOf10Trunc(a,5,-p);
 | 
						|
 | 
						|
	if (p>0)  {
 | 
						|
		i = _MulUnsArrByPwrOf10(a,p,10);
 | 
						|
 | 
						|
		/* check for overflow */
 | 
						|
		ad[0]=a[5];
 | 
						|
		ad[1]=a[6];
 | 
						|
		ad[2]=a[7];
 | 
						|
		ad[3]=a[8];
 | 
						|
		ad[4]=a[9];
 | 
						|
		_DoubleUnsArr(ad, 5);
 | 
						|
		if (a[4]&0x8000)
 | 
						|
			ad[0]=ad[0]+1;
 | 
						|
 | 
						|
		if (!((i == GM_SUCCESS)	&&
 | 
						|
			(_CompareUnsArr(ad,b,5)	== -1)))
 | 
						|
			return(GM_OVERFLOW);
 | 
						|
		}
 | 
						|
 | 
						|
	_DivUns10ArrByUns5ArrTrn(cn, a,	b);
 | 
						|
 | 
						|
	c->dc.id = nid;
 | 
						|
	return(GM_SUCCESS);
 | 
						|
}
 |