$ od -c -N 50000 [_CDCSL_93-16_]<1>Cedar>release>FloatOps>RealImplSupport.c 0000000 / * R e a l I m p l S u p p o 0000020 r t . c \n \t C o p y r i g h t 0000040 323 1 9 8 8 , 1 9 9 0 b y 0000060 X e r o x C o r p o r a t i o 0000100 n . A l l r i g h t s r 0000120 e s e r v e d . \n \t M i c h a e 0000140 l P l a s s , M a r c h 2 0000160 , 1 9 8 8 3 : 3 9 : 4 5 p 0000200 m P S T \n \t B r y a n L y l 0000220 e s O c t o b e r 1 8 , 1 0000240 9 8 8 3 : 0 0 : 4 0 p m P 0000260 D T \n \t R u s s A t k i n s o 0000300 n , D e c e m b e r 2 0 , 0000320 1 9 9 0 1 : 4 6 : 4 3 p m 0000340 P S T \n \t * / \n \t \t \n / * m u 0000360 s t b e c o m p i l e d w 0000400 i t h - f s i n g l e * / \n 0000420 \n / * R e a l I m p l S u p p 0000440 o r t . c p r o v i d e s t 0000460 h e h o o k s i n t o c 0000500 f l o a t i n g - p o i n t s 0000520 u p p o r t t h a t a r e 0000540 r e q u i r e d b y B a s i 0000560 c s . m e s a a n d R e a l 0000600 I m p l . m e s a * / \n \n # i 0000620 n c l u d e < m a t h . h > \n 0000640 \t \n t y p e d e f i n t R E 0000660 A L 3 2 ; \n t y p e d e f u n 0000700 s i g n e d w o r d , * p t 0000720 r ; \n \n R E A L 3 2 X R _ R E 0000740 A L 3 2 _ f r o m _ d o u b l e 0000760 ( ) ; \n d o u b l e X R _ d o 0001000 u b l e _ f r o m _ R E A L 3 2 0001020 ( ) ; \n \n R E A L 3 2 X R _ R 0001040 E A L 3 2 _ f r o m _ d o u b l 0001060 e ( d ) d o u b l e d ; { 0001100 \n \t f l o a t f = d ; \n \t 0001120 r e t u r n ( * ( ( R E A L 3 0001140 2 * ) & f ) ) ; \n \t } ; \n \n d 0001160 o u b l e X R _ d o u b l e _ 0001200 f r o m _ R E A L 3 2 ( r ) R 0001220 E A L 3 2 r ; { \n \t r e t u 0001240 r n ( * ( ( f l o a t * ) & 0001260 r ) ) ; \n \t } ; \n \n e x t e r n 0001300 i n t X R _ R E A L 3 2 _ F 0001320 i x ( r ) R E A L 3 2 r ; 0001340 { \n \t i n t i ; \n \t i = ( 0001360 i n t ) ( * ( f l o a t * ) 0001400 ( & r ) ) ; \n \t r e t u r n ( i 0001420 ) ; \n \t } ; \n \n e x t e r n i 0001440 n t X R _ R E A L 3 2 _ R o u 0001460 n d ( r ) R E A L 3 2 r ; 0001500 { \n \t / * t h i s i s a 0001520 r e l a t i v e l y e x p e n 0001540 s i v e , b u t c o r r e c 0001560 t , r o u n d t o n e a r 0001600 e s t * / \n \t w o r d w = 0001620 r ; \n \t w o r d a b s w = 0001640 ( w < < 1 ) > > 1 ; 0001660 / * q u i c k a n d c h e 0001700 a p h a c k f o r a b s o 0001720 l u t e v a l u e * / \n \t f 0001740 l o a t f = ( * ( f l o a 0001760 t * ) ( & a b s w ) ) ; \n \t f 0002000 l o a t h = 0 . 5 ; \n \t i 0002020 n t r n d = f + h ; / 0002040 * r o u n d t o w a r d s 0002060 n e a r e s t ( r o u g h l y 0002100 ) * / \n \t f l o a t r f = 0002120 r n d ; \n \t f l o a t d f 0002140 = r f - f ; \n \t i f ( d 0002160 f = = h ) i f ( ( r n d 0002200 & 1 ) = = 1 ) r n d 0002220 = r n d - 1 ; \n \t i f ( 0002240 w ! = a b s w ) r n d = 0002260 - r n d ; \n \t r e t u r n ( 0002300 r n d ) ; \n \t } ; \n \n e x t e r 0002320 n i n t X R _ R E A L 3 2 _ 0002340 C e i l i n g ( r ) R E A L 3 0002360 2 r ; { \n \t i n t t e m p 0002400 ; \n \t f l o a t f o o = ( 0002420 * ( f l o a t * ) ( & r ) ) 0002440 ; \n \t t e m p = ( i n t ) 0002460 f o o ; \n \t i f ( r < = 0 0002500 ) r e t u r n ( t e m p ) ; 0002520 \n \t i f ( t e m p = = f o 0002540 o ) r e t u r n ( t e m p ) 0002560 ; \n \t r e t u r n ( t e m p + 0002600 1 ) ; \n \t } ; \n \n e x t e r n 0002620 i n t X R _ R E A L 3 2 _ F l 0002640 o o r ( r ) R E A L 3 2 r ; 0002660 { \n \t i n t t e m p ; \n \t f 0002700 l o a t f o o = ( * ( f l 0002720 o a t * ) ( & r ) ) ; \n \t t 0002740 e m p = ( i n t ) f o o ; 0002760 \n \t i f ( r > = 0 ) r e 0003000 t u r n ( t e m p ) ; \n \t i f 0003020 ( t e m p = = f o o ) r 0003040 e t u r n ( t e m p ) ; \n \t r 0003060 e t u r n ( t e m p - 1 ) 0003100 ; \n \t } ; \n \n e x t e r n i n 0003120 t X R _ R e a l C o m p a r e 0003140 ( x , y ) R E A L 3 2 x , 0003160 y ; { \n \t / * r e t : 0 0003200 - - > x < y , 1 - - 0003220 > x = y , 2 - - > x 0003240 > y * / \n \t i n t t e m 0003260 p ; \n \t f l o a t x f = ( 0003300 * ( f l o a t * ) ( & x ) ) 0003320 ; \n \t f l o a t y f = ( * 0003340 ( f l o a t * ) ( & y ) ) ; 0003360 \n \t i f ( x f < y f ) r 0003400 e t u r n ( 0 ) ; \n \t i f ( 0003420 x f > y f ) r e t u r n 0003440 ( 2 ) ; \n \t r e t u r n ( 1 ) 0003460 ; \n \t } ; \n \n 0003467