annotate packages/language/c/libm/current/src/complex/cprojf.c @ 3260:77f9d3253c3e

Add: Complex number header and library (single and double precision floating point), port from Newlib. Add: Single precision floating point library, port from Newlib. [ Bugzilla 1001539 ]
author vae
date Sun, 25 Aug 2013 14:38:57 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3260
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
1 /* $NetBSD: cprojf.c,v 1.3 2010/09/20 17:51:38 christos Exp $ */
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
2
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
3 /*-
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
4 * Copyright (c) 2010 The NetBSD Foundation, Inc.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
5 * All rights reserved.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
6 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
7 * Redistribution and use in source and binary forms, with or without
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
8 * modification, are permitted provided that the following conditions
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
9 * are met:
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
10 * 1. Redistributions of source code must retain the above copyright
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
15 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
18 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
27 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
28 * imported and modified include for newlib 2010/10/03
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
29 * Marco Atzeri <marco_atzeri@yahoo.it>
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
30 */
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
31
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
32 /*__RCSID("$NetBSD: cprojf.c,v 1.3 2010/09/20 17:51:38 christos Exp $"); */
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
33
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
34 #include <complex.h>
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
35 #include <math.h>
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
36
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
37 #include "../mathincl/fdlibm.h"
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
38
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
39 /*
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
40 * cprojf(float complex z)
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
41 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
42 * These functions return the value of the projection (not stereographic!)
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
43 * onto the Riemann sphere.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
44 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
45 * z projects to z, except that all complex infinities (even those with one
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
46 * infinite part and one NaN part) project to positive infinity on the real axis.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
47 * If z has an infinite part, then cproj(z) shall be equivalent to:
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
48 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
49 * INFINITY + I * copysign(0.0, cimag(z))
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
50 */
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
51
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
52 float complex
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
53 cprojf(float complex z)
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
54 {
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
55 float_complex w = { .z = z };
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
56
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
57 if (isinff(crealf(z)) || isinff(cimagf(z))) {
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
58 #ifdef __INFINITY
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
59 REAL_PART(w) = __INFINITY;
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
60 #else
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
61 REAL_PART(w) = HUGE_VALF;
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
62 #endif
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
63 IMAG_PART(w) = copysignf(0.0, cimagf(z));
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
64 }
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
65
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
66 return (w.z);
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
67 }