campo-sirio/gfm/dmag.c

60 lines
1.2 KiB
C
Raw Normal View History

/* int MagnitudeOfDecimal(pSrc);
* ARGUMENT
* DEC *pSrc;
*
* DESCRIPTION
* returns the 'order of magnitude' of pSrc -- the exponent of the
* largest power of 10 less than or equal to absolute value of pSrc.
* Examples: MagnitudeOfDecimal(20) = 1
* MagnitudeOfDecimal(200)=2
* MagnitudeOfDecimal(2)=0
* MagnitudeOfDecimal(-.2) = -1
* MagnitudeOfDecimal(1)=0
* MagnitudeOfDecimal(3.14)=0
* MagnitudeOfDecimal(.003)= -3
* MagnitudeOfDecimal(0) = -32767
*
* SIDE EFFECTS
* None.
*
* RETURNS
* The magnitude of pSrc.
*
* POSSIBLE ERROR CODES
*
* GM_NULLPOINTER
*
* AUTHOR
* Jared Levy 5 / 18 / 1987
* Copyright (C) 1987-1990 Greenleaf Software Inc. All rights reserved.
*
* MODIFICATIONS
*
*/
#include <stdio.h>
#include "gm.h"
#include "gmsystem.h"
int MagnitudeOfDecimal(pSrc)
DEC *pSrc;
{
SHORT p;
_MacStart(GM_DMAG);
_MacInVarI(pSrc);
if (_MacIsDecZ(pSrc))
_MacRet( -32767);
/* finds pSrc->dc.sl in wrgGMPowersOfTen80Bit[] using a linear search */
/* of 80-bit unsigned values */
p = 1;
while ((p<=24) &&
(_CompareUnsArr(pSrc->dc.sl,
&wrgGMPowersOfTen80Bit[5*p], 5) != -1))
p++;
_MacRet(p - 1 - pSrc->dc.id);
}