s_roundf.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       s_roundf.c (1586B)
       ---
            1 /*-
            2  * Copyright (c) 2003, Steven G. Kargl
            3  * All rights reserved.
            4  *
            5  * Redistribution and use in source and binary forms, with or without
            6  * modification, are permitted provided that the following conditions
            7  * are met:
            8  * 1. Redistributions of source code must retain the above copyright
            9  *    notice unmodified, this list of conditions, and the following
           10  *    disclaimer.
           11  * 2. Redistributions in binary form must reproduce the above copyright
           12  *    notice, this list of conditions and the following disclaimer in the
           13  *    documentation and/or other materials provided with the distribution.
           14  *
           15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
           16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
           17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
           18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
           19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
           20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
           21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
           22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
           23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
           24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
           25  */
           26 
           27 #include <math.h>
           28 
           29 float
           30 roundf(float x)
           31 {
           32         float t;
           33 
           34         if (!isfinite(x))
           35                 return (x);
           36 
           37         if (x >= 0.0) {
           38                 t = ceilf(x);
           39                 if (t - x > 0.5)
           40                         t -= 1.0;
           41                 return (t);
           42         } else {
           43                 t = ceilf(-x);
           44                 if (t + x > 0.5)
           45                         t -= 1.0;
           46                 return (-t);
           47         }
           48 }