home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
LIBSRC.ZOO
/
libsrc
/
longlong
/
fixudfdi.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-02-22
|
791b
|
32 lines
#include "longlong.h"
#define HIGH_WORD_COEFF (((long long) 1) << BITS_PER_WORD)
long long
__fixunsdfdi (a)
double a;
{
double b;
unsigned long long v;
if (a < 0)
return 0;
/* Compute high word of result, as a flonum. */
b = (a / HIGH_WORD_COEFF);
/* Convert that to fixed (but not to long long!),
and shift it into the high word. */
v = (unsigned long int) b;
v <<= BITS_PER_WORD;
/* Remove high part from the double, leaving the low part as flonum. */
a -= (double)v;
/* Convert that to fixed (but not to long long!) and add it in.
Sometimes A comes out negative. This is significant, since
A has more bits than a long int does. */
if (a < 0)
v -= (unsigned long int) (- a);
else
v += (unsigned long int) a;
return v;
}