mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-24 13:33:08 +03:00 
			
		
		
		
	2000-09-30 H.J. Lu <hjl@gnu.org> * sysdeps/ieee754/ldbl-96/s_ceill.c (__ceill): Handle overflow. * sysdeps/ieee754/ldbl-96/s_floorl.c (__floorl): Likewise. 2000-09-29 H.J. Lu <hjl@gnu.org> * math/libm-test.inc (init_max_error): Clear all exceptions before starting test. (acosh_test): Test for existence of function. (asinh_test): Likewise. (atan2_test): Likewise. (cabs_test): Likewise. (cacos_test): Likewise. (cacosh_test): Likewise. (casin_test): Likewise. (casinh_test): Likewise. (catan_test): Likewise. (catanh_test): Likewise. (ccos_test): Likewise. (ccosh_test): Likewise. (cexp_test): Likewise. (clog_test): Likewise. (clog10_test): Likewise. (cosh_test): Likewise. (cpow_test): Likewise. (csin_test): Likewise. (csinh_test): Likewise. (csqrt_test): Likewise. (ctan_test): Likewise. (ctanh_test): Likewise. (fmod_test): Likewise. (hypot_test): Likewise. (remainder_test): Likewise. (remquo_test): Likewise. (sincos_test): Likewise. (sinh_test): Likewise. (tanh_test): Likewise. 2000-09-29 H.J. Lu <hjl@gnu.org> * sysdeps/ia64/ieee754.h: New file. * sysdeps/ia64/fpu/math_ldbl.h: New file. 2000-09-30 Jakub Jelinek <jakub@redhat.com> * elf/ldconfig.h (FLAG_X8664_LIB64): Define. * sysdeps/unix/sysv/linux/i386/readelflib.c: New file. 2000-09-30 Ulrich Drepper <drepper@redhat.com> * manual/charset.texi: Correct notations, reference to C90 amd 1, and some other details. * manual/ctype.texi: Likewise. Patches by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>.
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* s_ceill.c -- long double version of s_ceil.c.
 | |
|  * Conversion to long double by Ulrich Drepper,
 | |
|  * Cygnus Support, drepper@cygnus.com.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * ====================================================
 | |
|  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 | |
|  *
 | |
|  * Developed at SunPro, a Sun Microsystems, Inc. business.
 | |
|  * Permission to use, copy, modify, and distribute this
 | |
|  * software is freely granted, provided that this notice
 | |
|  * is preserved.
 | |
|  * ====================================================
 | |
|  */
 | |
| 
 | |
| #if defined(LIBM_SCCS) && !defined(lint)
 | |
| static char rcsid[] = "$NetBSD: $";
 | |
| #endif
 | |
| 
 | |
| /*
 | |
|  * ceill(x)
 | |
|  * Return x rounded toward -inf to integral value
 | |
|  * Method:
 | |
|  *	Bit twiddling.
 | |
|  * Exception:
 | |
|  *	Inexact flag raised if x not equal to ceil(x).
 | |
|  */
 | |
| 
 | |
| #include "math.h"
 | |
| #include "math_private.h"
 | |
| 
 | |
| #ifdef __STDC__
 | |
| static const long double huge = 1.0e4930;
 | |
| #else
 | |
| static long double huge = 1.0e4930;
 | |
| #endif
 | |
| 
 | |
| #ifdef __STDC__
 | |
| 	long double __ceill(long double x)
 | |
| #else
 | |
| 	long double __ceill(x)
 | |
| 	long double x;
 | |
| #endif
 | |
| {
 | |
| 	int32_t i1,j0;
 | |
| 	u_int32_t i,j,se,i0,sx;
 | |
| 	GET_LDOUBLE_WORDS(se,i0,i1,x);
 | |
| 	sx = (se>>15)&1;
 | |
| 	j0 = (se&0x7fff)-0x3fff;
 | |
| 	if(j0<31) {
 | |
| 	    if(j0<0) { 	/* raise inexact if x != 0 */
 | |
| 		if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */
 | |
| 		    if(sx) {se=0x8000;i0=0;i1=0;}
 | |
| 		    else if((i0|i1)!=0) { se=0x3fff;i0=0;i1=0;}
 | |
| 		}
 | |
| 	    } else {
 | |
| 		i = (0x7fffffff)>>j0;
 | |
| 		if(((i0&i)|i1)==0) return x; /* x is integral */
 | |
| 		if(huge+x>0.0) {	/* raise inexact flag */
 | |
| 		    if(sx==0) {
 | |
| 			if (j0>0 && (i0+(0x80000000>>j0))>i0)
 | |
| 			  i0+=0x80000000>>j0;
 | |
| 			else
 | |
| 			  {
 | |
| 			    i = 0x7fffffff;
 | |
| 			    ++se;
 | |
| 			  }
 | |
| 		    }
 | |
| 		    i0 &= (~i); i1=0;
 | |
| 		}
 | |
| 	    }
 | |
| 	} else if (j0>62) {
 | |
| 	    if(j0==0x4000) return x+x;	/* inf or NaN */
 | |
| 	    else return x;		/* x is integral */
 | |
| 	} else {
 | |
| 	    i = ((u_int32_t)(0xffffffff))>>(j0-31);
 | |
| 	    if((i1&i)==0) return x;	/* x is integral */
 | |
| 	    if(huge+x>0.0) { 		/* raise inexact flag */
 | |
| 		if(sx==0) {
 | |
| 		    if(j0==31) i0+=1;
 | |
| 		    else {
 | |
| 			j = i1 + (1<<(63-j0));
 | |
| 			if(j<i1) i0+=1;	/* got a carry */
 | |
| 			i1 = j;
 | |
| 		    }
 | |
| 		}
 | |
| 		i1 &= (~i);
 | |
| 	    }
 | |
| 	}
 | |
| 	SET_LDOUBLE_WORDS(x,se,i0,i1);
 | |
| 	return x;
 | |
| }
 | |
| weak_alias (__ceill, ceill)
 |