t2ex/bsd_source/lib/libc/src_bsd/math/s_round.c | bare source | permlink (0.00 seconds) |
1: /* $OpenBSD: s_round.c,v 1.2 2011/07/06 00:02:42 martynas Exp $ */ 2: 3: /*- 4: * Copyright (c) 2003, Steven G. Kargl 5: * All rights reserved. 6: * 7: * Redistribution and use in source and binary forms, with or without 8: * modification, are permitted provided that the following conditions 9: * are met: 10: * 1. Redistributions of source code must retain the above copyright 11: * notice unmodified, this list of conditions, and the following 12: * disclaimer. 13: * 2. Redistributions in binary form must reproduce the above copyright 14: * notice, this list of conditions and the following disclaimer in the 15: * documentation and/or other materials provided with the distribution. 16: * 17: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27: */ 28: 29: /* LINTLIBRARY */ 30: 31: #include <sys/cdefs.h> 32: #include <float.h> 33: #include <math.h> 34: 35: #include "math_private.h" 36: 37: double 38: round(double x) 39: { 40: double t; 41: 42: if (isinf(x) || isnan(x)) 43: return (x); 44: 45: if (x >= 0.0) { 46: t = floor(x); 47: if (t - x <= -0.5) 48: t += 1.0; 49: return (t); 50: } else { 51: t = floor(-x); 52: if (t + x <= -0.5) 53: t += 1.0; 54: return (-t); 55: } 56: } 57: 58: #if LDBL_MANT_DIG == 53 59: #ifdef lint 60: /* PROTOLIB1 */ 61: long double roundl(long double); 62: #else /* lint */ 63: __weak_alias(roundl, round); 64: #endif /* lint */ 65: #endif /* LDBL_MANT_DIG == 53 */