/* * @(#) lmuldiv.h - Long (64-bit result) mul/div operations library header. * (c) 1998 Ivan Maidanski http://ivmai.chat.ru * Freeware function library source. All rights reserved. ** * Language: ANSI C * Tested with: Microsoft Visual C++ (R) v4.2, Borland C/C++ v3.1 * Last modified: 1998-07-22 17:50:00 GMT+04:00 */ /* Library source file: lmuldiv.c */ /* l_mul_shr(), lu_mul_shr(), l_div_mod(), lu_div_mod(), l_mul_div(), lu_mul_div() */ #ifndef _LMULDIV_H_INCLUDED #define _LMULDIV_H_INCLUDED /* let LOW(x)=((x)&((1<<(sizeof(long)*CHAR_BIT))-1)) */ /* let HIGH(x)=((x)>>(sizeof(long)*CHAR_BIT)) */ /* let HIGHLOW(x,y)=(((x)<<(sizeof(long)*CHAR_BIT))|(y)) */ /* res=HIGH(a*b) */ long l_mul_shr(long a, long b); unsigned long lu_mul_shr(unsigned long a, unsigned long b); /* res=LOW(HIGHLOW(hv,lv)/d) */ /* if (prem!=NULL) *prem=HIGHLOW(hv,lv)%d */ long l_div_mod(long *prem, long hv, long lv, long d); unsigned long lu_div_mod(unsigned long *prem, unsigned long hv, unsigned long lv, unsigned long d); /* res=LOW(a*b/d) */ /* if (prem!=NULL) *prem=a*b%d */ long l_mul_div(long *prem, long a, long b, long d); unsigned long lu_mul_div(unsigned long *prem, unsigned long a, unsigned long b, unsigned long d); #endif