s_rintf.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       s_rintf.c (1102B)
       ---
            1 /* s_rintf.c -- float version of s_rint.c.
            2  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
            3  */
            4 
            5 /*
            6  * ====================================================
            7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
            8  *
            9  * Developed at SunPro, a Sun Microsystems, Inc. business.
           10  * Permission to use, copy, modify, and distribute this
           11  * software is freely granted, provided that this notice
           12  * is preserved.
           13  * ====================================================
           14  */
           15 
           16 #include "math.h"
           17 #include "math_private.h"
           18 
           19 static const float
           20 TWO23[2]={
           21   8.3886080000e+06, /* 0x4b000000 */
           22  -8.3886080000e+06, /* 0xcb000000 */
           23 };
           24 
           25 float
           26 rintf(float x)
           27 {
           28         int32_t i0,j0,sx;
           29         volatile float w,t;        /* volatile works around gcc bug */
           30         GET_FLOAT_WORD(i0,x);
           31         sx = (i0>>31)&1;
           32         j0 = ((i0>>23)&0xff)-0x7f;
           33         if(j0<23) {
           34             if(j0<0) {
           35                 if((i0&0x7fffffff)==0) return x;
           36                 w = TWO23[sx]+x;
           37                 t =  w-TWO23[sx];
           38                 return t;
           39             }
           40             w = TWO23[sx]+x;
           41             return w-TWO23[sx];
           42         }
           43         if(j0==0x80) return x+x;        /* inf or NaN */
           44         else return x;                        /* x is integral */
           45 }