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 lround(double x)11lround (double x) 12 { 13 double res; 14 15 if (x >= 0.0) 16 { 17 res = ceil (x); 18 if (res - x > 0.5) 19 res -= 1.0; 20 } 21 else 22 { 23 res = ceil (-x); 24 if (res + x > 0.5) 25 res -= 1.0; 26 res = -res; 27 } 28 if (!isfinite (res) 29 || res > (double) LONG_MAX 30 || res < (double) LONG_MIN) 31 { 32 errno = ERANGE; 33 /* Undefined behaviour, so we could return anything. */ 34 /* return res > 0.0 ? LONG_MAX : LONG_MIN; */ 35 } 36 return (long) res; 37 } 38