CMGDK r49-rc2
|
00001 / * C o p y r i g h t ( C ) 2 0 0 0 M y S Q L A B 00002 00003 T h i s p r o g r a m i s f r e e s o f t w a r e ; y o u c a n r e d i s t r i b u t e i t a n d / o r m o d i f y 00004 00005 i t u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c L i c e n s e a s p u b l i s h e d b y 00006 00007 t h e F r e e S o f t w a r e F o u n d a t i o n ; v e r s i o n 2 o f t h e L i c e n s e . 00008 00009 T h i s p r o g r a m i s d i s t r i b u t e d i n t h e h o p e t h a t i t w i l l b e u s e f u l , 00010 00011 b u t W I T H O U T A N Y W A R R A N T Y ; w i t h o u t e v e n t h e i m p l i e d w a r r a n t y o f 00012 00013 M E R C H A N T A B I L I T Y o r F I T N E S S F O R A P A R T I C U L A R P U R P O S E . S e e t h e 00014 00015 G N U G e n e r a l P u b l i c L i c e n s e f o r m o r e d e t a i l s . 00016 00017 Y o u s h o u l d h a v e r e c e i v e d a c o p y o f t h e G N U G e n e r a l P u b l i c L i c e n s e 00018 00019 a l o n g w i t h t h i s p r o g r a m ; i f n o t , w r i t e t o t h e F r e e S o f t w a r e 00020 00021 F o u n d a t i o n , I n c . , 5 9 T e m p l e P l a c e , S u i t e 3 3 0 , B o s t o n , M A 0 2 1 1 1 - 1 3 0 7 U S A * / 00022 00023 # i f n d e f _ d e c i m a l _ h 00024 00025 # d e f i n e _ d e c i m a l _ h 00026 00027 t y p e d e f e n u m 00028 00029 { T R U N C A T E = 0 , H A L F _ E V E N , H A L F _ U P , C E I L I N G , F L O O R } 00030 00031 d e c i m a l _ r o u n d _ m o d e ; 00032 00033 t y p e d e f i n t 3 2 d e c i m a l _ d i g i t _ t ; 00034 00035 t y p e d e f s t r u c t s t _ d e c i m a l _ t { 00036 00037 i n t i n t g , f r a c , l e n ; 00038 00039 m y _ b o o l s i g n ; 00040 00041 d e c i m a l _ d i g i t _ t * b u f ; 00042 00043 } d e c i m a l _ t ; 00044 00045 i n t i n t e r n a l _ s t r 2 d e c ( c o n s t c h a r * f r o m , d e c i m a l _ t * t o , c h a r * * e n d , 00046 00047 m y _ b o o l f i x e d ) ; 00048 00049 i n t d e c i m a l 2 s t r i n g ( d e c i m a l _ t * f r o m , c h a r * t o , i n t * t o _ l e n , 00050 00051 i n t f i x e d _ p r e c i s i o n , i n t f i x e d _ d e c i m a l s , 00052 00053 c h a r f i l l e r ) ; 00054 00055 i n t d e c i m a l 2 u l o n g l o n g ( d e c i m a l _ t * f r o m , u l o n g l o n g * t o ) ; 00056 00057 i n t u l o n g l o n g 2 d e c i m a l ( u l o n g l o n g f r o m , d e c i m a l _ t * t o ) ; 00058 00059 i n t d e c i m a l 2 l o n g l o n g ( d e c i m a l _ t * f r o m , l o n g l o n g * t o ) ; 00060 00061 i n t l o n g l o n g 2 d e c i m a l ( l o n g l o n g f r o m , d e c i m a l _ t * t o ) ; 00062 00063 i n t d e c i m a l 2 d o u b l e ( d e c i m a l _ t * f r o m , d o u b l e * t o ) ; 00064 00065 i n t d o u b l e 2 d e c i m a l ( d o u b l e f r o m , d e c i m a l _ t * t o ) ; 00066 00067 i n t d e c i m a l _ a c t u a l _ f r a c t i o n ( d e c i m a l _ t * f r o m ) ; 00068 00069 i n t d e c i m a l 2 b i n ( d e c i m a l _ t * f r o m , u c h a r * t o , i n t p r e c i s i o n , i n t s c a l e ) ; 00070 00071 i n t b i n 2 d e c i m a l ( c o n s t u c h a r * f r o m , d e c i m a l _ t * t o , i n t p r e c i s i o n , i n t s c a l e ) ; 00072 00073 i n t d e c i m a l _ s i z e ( i n t p r e c i s i o n , i n t s c a l e ) ; 00074 00075 i n t d e c i m a l _ b i n _ s i z e ( i n t p r e c i s i o n , i n t s c a l e ) ; 00076 00077 i n t d e c i m a l _ r e s u l t _ s i z e ( d e c i m a l _ t * f r o m 1 , d e c i m a l _ t * f r o m 2 , c h a r o p , 00078 00079 i n t p a r a m ) ; 00080 00081 i n t d e c i m a l _ i n t g ( d e c i m a l _ t * f r o m ) ; 00082 00083 i n t d e c i m a l _ a d d ( d e c i m a l _ t * f r o m 1 , d e c i m a l _ t * f r o m 2 , d e c i m a l _ t * t o ) ; 00084 00085 i n t d e c i m a l _ s u b ( d e c i m a l _ t * f r o m 1 , d e c i m a l _ t * f r o m 2 , d e c i m a l _ t * t o ) ; 00086 00087 i n t d e c i m a l _ c m p ( d e c i m a l _ t * f r o m 1 , d e c i m a l _ t * f r o m 2 ) ; 00088 00089 i n t d e c i m a l _ m u l ( d e c i m a l _ t * f r o m 1 , d e c i m a l _ t * f r o m 2 , d e c i m a l _ t * t o ) ; 00090 00091 i n t d e c i m a l _ d i v ( d e c i m a l _ t * f r o m 1 , d e c i m a l _ t * f r o m 2 , d e c i m a l _ t * t o , 00092 00093 i n t s c a l e _ i n c r ) ; 00094 00095 i n t d e c i m a l _ m o d ( d e c i m a l _ t * f r o m 1 , d e c i m a l _ t * f r o m 2 , d e c i m a l _ t * t o ) ; 00096 00097 i n t d e c i m a l _ r o u n d ( d e c i m a l _ t * f r o m , d e c i m a l _ t * t o , i n t n e w _ s c a l e , 00098 00099 d e c i m a l _ r o u n d _ m o d e m o d e ) ; 00100 00101 i n t d e c i m a l _ i s _ z e r o ( d e c i m a l _ t * f r o m ) ; 00102 00103 v o i d m a x _ d e c i m a l ( i n t p r e c i s i o n , i n t f r a c , d e c i m a l _ t * t o ) ; 00104 00105 # d e f i n e s t r i n g 2 d e c i m a l ( A , B , C ) i n t e r n a l _ s t r 2 d e c ( ( A ) , ( B ) , ( C ) , 0 ) 00106 00107 # d e f i n e s t r i n g 2 d e c i m a l _ f i x e d ( A , B , C ) i n t e r n a l _ s t r 2 d e c ( ( A ) , ( B ) , ( C ) , 1 ) 00108 00109 / * s e t a d e c i m a l _ t t o z e r o * / 00110 00111 # d e f i n e d e c i m a l _ m a k e _ z e r o ( d e c ) d o { \ 00112 00113 ( d e c ) - > b u f [ 0 ] = 0 ; \ 00114 00115 ( d e c ) - > i n t g = 1 ; \ 00116 00117 ( d e c ) - > f r a c = 0 ; \ 00118 00119 ( d e c ) - > s i g n = 0 ; \ 00120 00121 } w h i l e ( 0 ) 00122 00123 / * 00124 00125 r e t u r n s t h e l e n g t h o f t h e b u f f e r t o h o l d s t r i n g r e p r e s e n t a t i o n 00126 00127 o f t h e d e c i m a l ( i n c l u d i n g d e c i m a l d o t , p o s s i b l e s i g n a n d \ 0 ) 00128 00129 * / 00130 00131 # d e f i n e d e c i m a l _ s t r i n g _ s i z e ( d e c ) ( ( ( d e c ) - > i n t g ? ( d e c ) - > i n t g : 1 ) + \ 00132 00133 ( d e c ) - > f r a c + ( ( d e c ) - > f r a c > 0 ) + 2 ) 00134 00135 / * n e g a t e a d e c i m a l * / 00136 00137 # d e f i n e d e c i m a l _ n e g ( d e c ) d o { ( d e c ) - > s i g n ^ = 1 ; } w h i l e ( 0 ) 00138 00139 / * 00140 00141 c o n v e n t i o n s : 00142 00143 d e c i m a l _ s m t h ( ) = = 0 - - e v e r y t h i n g ' s o k 00144 00145 d e c i m a l _ s m t h ( ) < = 1 - - r e s u l t i s u s a b l e , b u t p r e c i s i o n l o s s i s p o s s i b l e 00146 00147 d e c i m a l _ s m t h ( ) < = 2 - - r e s u l t c a n b e u n u s a b l e , m o s t s i g n i f i c a n t d i g i t s 00148 00149 c o u l d ' v e b e e n l o s t 00150 00151 d e c i m a l _ s m t h ( ) > 2 - - n o r e s u l t w a s g e n e r a t e d 00152 00153 * / 00154 00155 # d e f i n e E _ D E C _ O K 0 00156 00157 # d e f i n e E _ D E C _ T R U N C A T E D 1 00158 00159 # d e f i n e E _ D E C _ O V E R F L O W 2 00160 00161 # d e f i n e E _ D E C _ D I V _ Z E R O 4 00162 00163 # d e f i n e E _ D E C _ B A D _ N U M 8 00164 00165 # d e f i n e E _ D E C _ O O M 1 6 00166 00167 # d e f i n e E _ D E C _ E R R O R 3 1 00168 00169 # d e f i n e E _ D E C _ F A T A L _ E R R O R 3 0 00170 00171 # e n d i f 00172 00173