]>
git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/ieee754/dbl-64/wordsize-64/s_ceil.c
1 /* @(#)s_ceil.c 5.1 93/09/24 */
3 * ====================================================
4 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
6 * Developed at SunPro, a Sun Microsystems, Inc. business.
7 * Permission to use, copy, modify, and distribute this
8 * software is freely granted, provided that this notice
10 * ====================================================
15 * Return x rounded toward -inf to integral value
19 * Inexact flag raised if x not equal to ceil(x).
23 #include "math_private.h"
25 static const double huge
= 1.0e300
;
32 EXTRACT_WORDS64(i0
,x
);
33 j0
= ((i0
>>52)&0x7ff)-0x3ff;
35 if(j0
<0) { /* raise inexact if x != 0 */
36 if(huge
+x
>0.0) {/* return 0*sign(x) if |x|<1 */
37 if(i0
<0) {i0
=INT64_C(0x8000000000000000);}
38 else if(i0
!=0) { i0
=INT64_C(0x3ff0000000000000);}
41 i
= INT64_C(0x000fffffffffffff)>>j0
;
42 if((i0
&i
)==0) return x
; /* x is integral */
43 if(huge
+x
>0.0) { /* raise inexact flag */
44 if(i0
>0) i0
+= UINT64_C(0x0010000000000000)>>j0
;
49 if(j0
==0x400) return x
+x
; /* inf or NaN */
50 else return x
; /* x is integral */
56 weak_alias (__ceil
, ceil
)
57 # ifdef NO_LONG_DOUBLE
58 strong_alias (__ceil
, __ceill
)
59 weak_alias (__ceil
, ceill
)