diff options
-rw-r--r-- | include/Makefile | 3 | ||||
-rw-r--r-- | include/complex.h | 60 | ||||
-rw-r--r-- | lib/msun/src/math.h | 2 | ||||
-rw-r--r-- | lib/msun/src/w_cabs.c | 19 | ||||
-rw-r--r-- | lib/msun/src/w_cabsf.c | 18 |
5 files changed, 82 insertions, 20 deletions
diff --git a/include/Makefile b/include/Makefile index 84cba1d..b9798cd 100644 --- a/include/Makefile +++ b/include/Makefile @@ -8,7 +8,8 @@ CLEANFILES= osreldate.h version vers.c SUBDIR= rpcsvc rpc -FILES= a.out.h ar.h assert.h bitstring.h ctype.h db.h dirent.h disktab.h \ +FILES= a.out.h ar.h assert.h bitstring.h complex.h ctype.h db.h \ + dirent.h disktab.h \ dlfcn.h elf.h elf-hints.h err.h fnmatch.h fstab.h \ fts.h glob.h grp.h strhash.h \ hesiod.h histedit.h ieeefp.h ifaddrs.h iso646.h langinfo.h \ diff --git a/include/complex.h b/include/complex.h new file mode 100644 index 0000000..faf43da --- /dev/null +++ b/include/complex.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2001 The FreeBSD Project. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _COMPLEX_H +#define _COMPLEX_H + +#ifdef __GNUC__ +#define _Complex __complex__ +#define _Complex_I 1.0fi +#endif + +#define complex _Complex +#define I _Complex_I + +#include <sys/cdefs.h> + +__BEGIN_DECLS + +double cabs __P((double complex)); +float cabsf __P((float complex)); +double cimag __P((double complex)); +float cimagf __P((float complex)); +double creal __P((double complex)); +float crealf __P((float complex)); + +__END_DECLS + +#ifdef __GNUC__ +#define cimag(z) (__imag__ (z)) +#define cimagf(z) (__imag__ (z)) +#define creal(z) (__real__ (z)) +#define crealf(z) (__real__ (z)) +#endif + +#endif /* _COMPLEX_H */ diff --git a/lib/msun/src/math.h b/lib/msun/src/math.h index e26e39f..e5a5e16 100644 --- a/lib/msun/src/math.h +++ b/lib/msun/src/math.h @@ -174,7 +174,6 @@ extern double scalbn __P((double, int)); /* * BSD math library entry points */ -extern double cabs(); extern double drem __P((double, double)); extern double expm1 __P((double)); extern double log1p __P((double)); @@ -257,7 +256,6 @@ extern float scalbnf __P((float, int)); /* * float versions of BSD math library entry points */ -extern float cabsf (); extern float dremf __P((float, float)); extern float expm1f __P((float)); extern float log1pf __P((float)); diff --git a/lib/msun/src/w_cabs.c b/lib/msun/src/w_cabs.c index b140515..a33a41f 100644 --- a/lib/msun/src/w_cabs.c +++ b/lib/msun/src/w_cabs.c @@ -5,23 +5,24 @@ * Placed into the Public Domain, 1994. */ -#include <math.h> +#ifndef lint +static const char rcsid[] = + "$FreeBSD$"; +#endif /* not lint */ -struct complex { - double x; - double y; -}; +#include <complex.h> +#include <math.h> double cabs(z) - struct complex z; + double complex z; { - return hypot(z.x, z.y); + return hypot(creal(z), cimag(z)); } double z_abs(z) - struct complex *z; + double complex *z; { - return hypot(z->x, z->y); + return hypot(creal(*z), cimag(*z)); } diff --git a/lib/msun/src/w_cabsf.c b/lib/msun/src/w_cabsf.c index 6336d6d..e7bfe22 100644 --- a/lib/msun/src/w_cabsf.c +++ b/lib/msun/src/w_cabsf.c @@ -5,17 +5,19 @@ * Placed into the Public Domain, 1994. */ -#include "math.h" -#include "math_private.h" +#ifndef lint +static const char rcsid[] = + "$FreeBSD$"; +#endif /* not lint */ -struct complex { - float x; - float y; -}; +#include <complex.h> +#include <math.h> +#include "math_private.h" float cabsf(z) - struct complex z; + float complex z; { - return hypotf(z.x, z.y); + + return hypotf(crealf(z), cimagf(z)); } |