$ od -c -N 50000 [_CDMiwok_01_]<bonsai2.0>cedar>release>FloatOps>RealImplSupport.c!1
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 o
0001160 u b l e X R _ d o u b l e _ f
0001200 r o m _ R E A L 3 2 ( r ) R E
0001220 A L 3 2 r ; { \n \t r e t u r
0001240 n ( * ( ( f l o a t * ) & r
0001260 ) ) ; \n \t } \n \n e x t e r n i
0001300 n t X R _ R E A L 3 2 _ F i x
0001320 ( r ) R E A L 3 2 r ; { \n
0001340 \t i n t i ; \n \t i = ( i n
0001360 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 n t
0001440 X R _ R E A L 3 2 _ R o u n d (
0001460 r ) R E A L 3 2 r ; { \n \t
0001500 / * t h i s i s a r e l
0001520 a t i v e l y e x p e n s i v
0001540 e , b u t c o r r e c t ,
0001560 r o u n d t o n e a r e s t
0001600 * / \n \t w o r d w = r ;
0001620 \n \t w o r d a b s w = ( w
0001640 < < 1 ) > > 1 ; / *
0001660 q u i c k a n d c h e a p
0001700 h a c k f o r a b s o l u t
0001720 e v a l u e * / \n \t f l o a
0001740 t f = ( * ( f l o a t *
0001760 ) ( & a b s w ) ) ; \n \t f l o a
0002000 t h = 0 . 5 ; \n \t i n t
0002020 r n d = f + h ; / * r
0002040 o u n d t o w a r d s n e a
0002060 r e s t ( r o u g h l y ) *
0002100 / \n \t f l o a t r f = r n
0002120 d ; \n \t f l o a t d f = r
0002140 f - f ; \n \t i f ( d f =
0002160 = h ) i f ( ( r n d &
0002200 1 ) = = 1 ) r n d = r
0002220 n d - 1 ; \n \t i f ( w !
0002240 = a b s w ) r n d = - r
0002260 n d ; \n \t r e t u r n ( r n d
0002300 ) ; \n \t } \n \n e x t e r n i n
0002320 t X R _ R E A L 3 2 _ C e i l
0002340 i n g ( r ) R E A L 3 2 r ;
0002360 { \n \t i n t t e m p ; \n \t f
0002400 l o a t f o o = ( * ( f l
0002420 o a t * ) ( & r ) ) ; \n \t t
0002440 e m p = ( i n t ) f o o ;
0002460 \n \t i f ( r < = 0 ) r e
0002500 t u r n ( t e m p ) ; \n \t i f
0002520 ( t e m p = = f o o ) r
0002540 e t u r n ( t e m p ) ; \n \t r
0002560 e t u r n ( t e m p + 1 ) ; \n
0002600 \t } \n \t \n e x t e r n i n t
0002620 X R _ R E A L 3 2 _ F l o o r (
0002640 r ) R E A L 3 2 r ; { \n \t
0002660 i n t t e m p ; \n \t f l o a t
0002700 f o o = ( * ( f l o a t
0002720 * ) ( & r ) ) ; \n \t t e m p
0002740 = ( i n t ) f o o ; \n \t i f
0002760 ( r > = 0 ) r e t u r n
0003000 ( t e m p ) ; \n \t i f ( t e
0003020 m p = = f o o ) r e t u r
0003040 n ( t e m p ) ; \n \t r e t u r
0003060 n ( t e m p - 1 ) ; \n \t }
0003100 \n \n e x t e r n i n t X R _
0003120 R e a l C o m p a r e ( x , y
0003140 ) R E A L 3 2 x , y ; {
0003160 \n \t / * r e t : 0 - - >
0003200 x < y , 1 - - > x =
0003220 y , 2 - - > x > y
0003240 * / \n \t i n t t e m p ; \n \t f
0003260 l o a t x f = ( * ( f l o
0003300 a t * ) ( & x ) ) ; \n \t f l
0003320 o a t y f = ( * ( f l o a
0003340 t * ) ( & y ) ) ; \n \t i f
0003360 ( x f < y f ) r e t u r n
0003400 ( 0 ) ; \n \t i f ( x f >
0003420 y f ) r e t u r n ( 2 ) ; \n
0003440 \t r e t u r n ( 1 ) ; \n \t } \n
0003460 \n
0003461