mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			83 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
| 
 | |
| /* @(#)s_copysign.c 5.1 93/09/24 */
 | |
| /*
 | |
|  * ====================================================
 | |
|  * 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.
 | |
|  * ====================================================
 | |
|  */
 | |
| 
 | |
| /*
 | |
| FUNCTION
 | |
| <<copysign>>, <<copysignf>>---sign of <[y]>, magnitude of <[x]>
 | |
| 
 | |
| INDEX
 | |
| 	copysign
 | |
| INDEX
 | |
| 	copysignf
 | |
| 
 | |
| ANSI_SYNOPSIS
 | |
| 	#include <math.h>
 | |
| 	double copysign (double <[x]>, double <[y]>);
 | |
| 	float copysignf (float <[x]>, float <[y]>);
 | |
| 
 | |
| TRAD_SYNOPSIS
 | |
| 	#include <math.h>
 | |
| 	double copysign (<[x]>, <[y]>)
 | |
| 	double <[x]>;
 | |
| 	double <[y]>;
 | |
| 
 | |
| 	float copysignf (<[x]>, <[y]>)
 | |
| 	float <[x]>;
 | |
| 	float <[y]>;
 | |
| 
 | |
| DESCRIPTION
 | |
| <<copysign>> constructs a number with the magnitude (absolute value)
 | |
| of its first argument, <[x]>, and the sign of its second argument,
 | |
| <[y]>.
 | |
| 
 | |
| <<copysignf>> does the same thing; the two functions differ only in
 | |
| the type of their arguments and result.
 | |
| 
 | |
| RETURNS
 | |
| <<copysign>> returns a <<double>> with the magnitude of
 | |
| <[x]> and the sign of <[y]>.
 | |
| <<copysignf>> returns a <<float>> with the magnitude of
 | |
| <[x]> and the sign of <[y]>.
 | |
| 
 | |
| PORTABILITY
 | |
| <<copysign>> is not required by either ANSI C or the System V Interface
 | |
| Definition (Issue 2).
 | |
| 
 | |
| */
 | |
| 
 | |
| /*
 | |
|  * copysign(double x, double y)
 | |
|  * copysign(x,y) returns a value with the magnitude of x and
 | |
|  * with the sign bit of y.
 | |
|  */
 | |
| 
 | |
| #include "fdlibm.h"
 | |
| 
 | |
| #ifndef _DOUBLE_IS_32BITS
 | |
| 
 | |
| #ifdef __STDC__
 | |
| 	double copysign(double x, double y)
 | |
| #else
 | |
| 	double copysign(x,y)
 | |
| 	double x,y;
 | |
| #endif
 | |
| {
 | |
| 	uint32_t hx,hy;
 | |
| 	GET_HIGH_WORD(hx,x);
 | |
| 	GET_HIGH_WORD(hy,y);
 | |
| 	SET_HIGH_WORD(x,(hx&0x7fffffff)|(hy&0x80000000));
 | |
|         return x;
 | |
| }
 | |
| 
 | |
| #endif /* _DOUBLE_IS_32BITS */
 |