You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.2 KiB
69 lines
2.2 KiB
/******************************Module*Header*******************************\
|
|
*
|
|
* *******************
|
|
* * GDI SAMPLE CODE *
|
|
* *******************
|
|
*
|
|
* Module Name: math64.h
|
|
*
|
|
* Additional support for 64 bit math.
|
|
*
|
|
* Copyright (C) 1995-1999 Microsoft Corporation. All rights reserved.
|
|
\**************************************************************************/
|
|
|
|
#ifndef __MATH64__
|
|
#define __MATH64__
|
|
|
|
//------------------------------------------------------------------------------
|
|
//
|
|
// We have to be careful of arithmetic overflow in a number of places.
|
|
// Fortunately, the compiler is guaranteed to natively support 64-bit
|
|
// signed LONGLONGs and 64-bit unsigned DWORDLONGs.
|
|
//
|
|
// Int32x32To64(a, b) is a macro defined in 'winnt.h' that multiplies
|
|
// two 32-bit LONGs to produce a 64-bit LONGLONG result.
|
|
//
|
|
// UInt64By32To32 is our own macro to divide a 64-bit DWORDLONG by
|
|
// a 32-bit ULONG to produce a 32-bit ULONG result.
|
|
//
|
|
// UInt64Mod32To32 is our own macro to modulus a 64-bit DWORDLONG by
|
|
// a 32-bit ULONG to produce a 32-bit ULONG result.
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
|
|
#define UInt64Div32To32(a, b) \
|
|
((((DWORDLONG)(a)) > ULONG_MAX) ? \
|
|
(ULONG)((DWORDLONG)(a) / (ULONG)(b)) : \
|
|
(ULONG)((ULONG)(a) / (ULONG)(b)))
|
|
|
|
#define UInt64Mod32To32(a, b) \
|
|
((((DWORDLONG)(a)) > ULONG_MAX) ? \
|
|
(ULONG)((DWORDLONG)(a) % (ULONG)(b)) : \
|
|
(ULONG)((ULONG)(a) % (ULONG)(b)))
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Type conversion functions
|
|
//------------------------------------------------------------------------------
|
|
static __inline void myFtoi(int *result, float f)
|
|
{
|
|
#if defined(_X86_)
|
|
__asm {
|
|
fld f
|
|
mov eax,result
|
|
fistp dword ptr [eax]
|
|
}
|
|
#else
|
|
*result = (int)f;
|
|
#endif
|
|
}
|
|
|
|
static __inline void myFtoui(unsigned long *result, float f)
|
|
{
|
|
*result = (unsigned long)f;
|
|
}
|
|
|
|
|
|
#endif // __MATH64__
|
|
|
|
|