1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #include <math.h> 7 #include <limits.h> 8 #include <errno.h> 9 10 long lroundf(float x)11lroundf (float x) 12 { 13 float res; 14 15 if (x >= 0.0F) 16 { 17 res = ceilf (x); 18 if (res - x > 0.5F) 19 res -= 1.0F; 20 } 21 else 22 { 23 res = ceilf (-x); 24 if (res + x > 0.5F) 25 res -= 1.0F; 26 res = -res; 27 } 28 if (!isfinite (res) 29 || res > (float) LONG_MAX 30 || res < (float) LONG_MIN) 31 { 32 errno = ERANGE; 33 /* Undefined behaviour, so we could return anything. */ 34 /* return res > 0.0F ? LONG_MAX : LONG_MIN; */ 35 } 36 return (long) res; 37 } 38