mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	1999-10-12 Andreas Jaeger <aj@suse.de> * stdlib/tst-environ.c: Include <string.h> for strcpy declaration. * math/basic-test.c: Fix typo. * locale/programs/xstrdup.c: Include string.h for glibc compilation to get string prototypes. * sysdeps/unix/sysv/linux/alpha/sys/ucontext.h: Add definition of gregset_t and fpregset_t. * sysdeps/generic/s_nexttowardf.c: Add parenthesis to shut up gcc warnings. Correct value for x == 0. * argp/argp-help.c: Remove broken definition of flockfile and funlockfile. 1999-10-12 Andreas Schwab <schwab@suse.de> * sysdeps/unix/sysv/linux/alpha/bits/sigaction.h: Update to match generic Linux version. 1999-10-12 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/bits/sigaction.h: Remove K&R compatibility.
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Single precision version of nexttoward.c.
 | |
|    Conversion to IEEE single float by Jakub Jelinek, jj@ultra.linux.cz. */
 | |
| /*
 | |
|  * ====================================================
 | |
|  * 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.
 | |
|  * ====================================================
 | |
|  */
 | |
| 
 | |
| /* IEEE functions
 | |
|  *	nexttowardf(x,y)
 | |
|  *	return the next machine floating-point number of x in the
 | |
|  *	direction toward y.
 | |
|  * This is for machines which use the same binary type for double and
 | |
|  * long double.
 | |
|  *   Special cases:
 | |
|  */
 | |
| 
 | |
| #include "math.h"
 | |
| #include "math_private.h"
 | |
| 
 | |
| #ifdef __STDC__
 | |
| 	float __nexttowardf(float x, long double y)
 | |
| #else
 | |
| 	float __nexttowardf(x,y)
 | |
| 	float x;
 | |
| 	long double y;
 | |
| #endif
 | |
| {
 | |
| 	int32_t hx,hy,ix,iy;
 | |
| 	u_int32_t ly;
 | |
| 
 | |
| 	GET_FLOAT_WORD(hx,x);
 | |
| 	EXTRACT_WORDS(hy,ly,y);
 | |
| 	ix = hx&0x7fffffff;		/* |x| */
 | |
| 	iy = hy&0x7fffffff;		/* |y| */
 | |
| 
 | |
| 	if((ix>=0x7f800000) ||				   /* x is nan */
 | |
| 	   ((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0))    /* y is nan */
 | |
| 	   return x+y;
 | |
| 	if((long double) x==y) return y;	/* x=y, return y */
 | |
| 	if(ix==0) {				/* x == 0 */
 | |
| 	    float x2;
 | |
| 	    SET_FLOAT_WORD(x,(u_int32_t)(hy&0x80000000)|1);/* return +-minsub*/
 | |
| 	    x2 = x*x;
 | |
| 	    if(x2==x) return x2; else return x; /* raise underflow flag */
 | |
| 	}
 | |
| 	if(hx>=0) {				/* x > 0 */
 | |
| 	    if(hy<0||(ix>>23)>(iy>>20)-0x380
 | |
| 	       || ((ix>>23)==(iy>>20)-0x380
 | |
| 		   && (ix&0x7fffff)>(((hy<<3)|(ly>>29))&0x7fffff)))	/* x > y, x -= ulp */
 | |
| 		hx -= 1;
 | |
| 	    else				/* x < y, x += ulp */
 | |
| 		hx += 1;
 | |
| 	} else {				/* x < 0 */
 | |
| 	    if(hy>=0||(ix>>23)>(iy>>20)-0x380
 | |
| 	       || ((ix>>23)==(iy>>20)-0x380
 | |
| 		   && (ix&0x7fffff)>(((hy<<3)|(ly>>29))&0x7fffff)))	/* x < y, x -= ulp */
 | |
| 		hx -= 1;
 | |
| 	    else				/* x > y, x += ulp */
 | |
| 		hx += 1;
 | |
| 	}
 | |
| 	hy = hx&0x7f800000;
 | |
| 	if(hy>=0x7f800000) return x+x;	/* overflow  */
 | |
| 	if(hy<0x00800000) {		/* underflow */
 | |
| 	    float x2 = x*x;
 | |
| 	    if(x2!=x) {		/* raise underflow flag */
 | |
| 		SET_FLOAT_WORD(x2,hx);
 | |
| 		return x2;
 | |
| 	    }
 | |
| 	}
 | |
| 	SET_FLOAT_WORD(x,hx);
 | |
| 	return x;
 | |
| }
 | |
| weak_alias (__nexttowardf, nexttowardf)
 |