1 /* wf_hypot.c -- float version of w_hypot.c.
2  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3  */
4 
5 /*
6  * ====================================================
7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8  *
9  * Developed at SunPro, a Sun Microsystems, Inc. business.
10  * Permission to use, copy, modify, and distribute this
11  * software is freely granted, provided that this notice
12  * is preserved.
13  * ====================================================
14  */
15 
16 /*
17  * wrapper hypotf(x,y)
18  */
19 
20 #include "fdlibm.h"
21 #include <errno.h>
22 
23 #ifdef __STDC__
hypotf(float x,float y)24 	float hypotf(float x, float y)	/* wrapper hypotf */
25 #else
26 	float hypotf(x,y)		/* wrapper hypotf */
27 	float x,y;
28 #endif
29 {
30 #ifdef _IEEE_LIBM
31 	return __ieee754_hypotf(x,y);
32 #else
33 	float z;
34 	struct exception exc;
35 	z = __ieee754_hypotf(x,y);
36 	if(_LIB_VERSION == _IEEE_) return z;
37 	if((!finitef(z))&&finitef(x)&&finitef(y)) {
38 	    /* hypotf(finite,finite) overflow */
39 #ifndef HUGE_VAL
40 #define HUGE_VAL inf
41 	    double inf = 0.0;
42 
43 	    SET_HIGH_WORD(inf,0x7ff00000);	/* set inf to infinite */
44 #endif
45 	    exc.type = OVERFLOW;
46 	    exc.name = "hypotf";
47 	    exc.err = 0;
48 	    exc.arg1 = (double)x;
49 	    exc.arg2 = (double)y;
50 	    if (_LIB_VERSION == _SVID_)
51 	       exc.retval = HUGE;
52 	    else
53 	       exc.retval = HUGE_VAL;
54 	    if (_LIB_VERSION == _POSIX_)
55 	       errno = ERANGE;
56 	    else if (!matherr(&exc)) {
57 	     	errno = ERANGE;
58 	    }
59 	    if (exc.err != 0)
60 	       errno = exc.err;
61             return (float)exc.retval;
62 	} else
63 	    return z;
64 #endif
65 }
66 
67 #ifdef _DOUBLE_IS_32BITS
68 
69 #ifdef __STDC__
hypot(double x,double y)70 	double hypot(double x, double y)
71 #else
72 	double hypot(x,y)
73 	double x,y;
74 #endif
75 {
76 	return (double) hypotf((float) x, (float) y);
77 }
78 
79 #endif /* defined(_DOUBLE_IS_32BITS) */
80