annotate packages/language/c/libm/current/src/complex/cproj.c @ 3292:7f8e529b4d82 default tip

Fix FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF() so it works with negative offsets.
author vae
date Wed, 29 Apr 2015 23:31:48 +0000
parents 77f9d3253c3e
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: cproj.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 /*
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
33 FUNCTION
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
34 <<cproj>>, <<cprojf>>--- Riemann sphere projection
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
35
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
36 INDEX
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
37 cproj
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
38 INDEX
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
39 cprojf
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
40
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
41 ANSI_SYNOPSIS
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
42 #include <complex.h>
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
43 double complex cproj(double complex <[z]>);
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
44 float complex cprojf(float complex <[z]>);
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
45
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
46
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
47 DESCRIPTION
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
48 These functions compute a projection of <[z]> onto the Riemann
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
49 sphere: <[z]> projects to <[z]> except that all complex infinities
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
50 (even those with one infinite part and one NaN part) project
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
51 to positive infinity on the real axis. If <[z]> has an infinite part,
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
52 then <<cproj>>(<[z]>) is equivalent to
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
53
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
54 INFINITY + I * copysign(0.0, cimag(z))
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
55
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
56 <<cprojf>> is identical to <<cproj>>, except that it performs
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
57 its calculations on <<floats complex>>.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
58
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
59 RETURNS
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
60 The cproj functions return the value of the projection onto
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
61 the Riemann sphere.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
62
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
63 PORTABILITY
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
64 <<cproj>> and <<cprojf>> are ISO C99
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 QUICKREF
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
67 <<cproj>> and <<cprojf>> are ISO C99
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
68
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
69 */
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
70
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
71 //#include <sys/cdefs.h>
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
72 /*__RCSID("$NetBSD: cproj.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
73
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
74 #include <complex.h>
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
75 #include <math.h>
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
76
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
77 #include "../mathincl/fdlibm.h"
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
78
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
79 /*
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
80 * cproj(double complex z)
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
81 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
82 * 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
83 * onto the Riemann sphere.
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
84 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
85 * 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
86 * 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
87 * 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
88 *
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
89 * INFINITY + I * copysign(0.0, cimag(z))
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
90 */
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
91 double complex
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
92 cproj(double complex z)
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
93 {
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
94 double_complex w = { .z = z };
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
95
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
96 if (isinf(creal(z)) || isinf(cimag(z))) {
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
97 #ifdef __INFINITY
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
98 REAL_PART(w) = __INFINITY;
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
99 #else
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
100 REAL_PART(w) = HUGE_VAL;
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
101 #endif
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
102 IMAG_PART(w) = copysign(0.0, cimag(z));
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
103 }
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
104
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
105 return (w.z);
77f9d3253c3e Add: Complex number header and library (single and double precision floating point),
vae
parents:
diff changeset
106 }