$ 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