amath  1.6.2
Simple command line calculator
ccsc.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2017 Carsten Sonne Larsen <cs@innolan.dk>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  *
25  */
26 
27 #include "prim.h"
28 #include "math.h"
29 #include "complex.h"
30 
31 /**
32  * @brief Cosecant of a complex number
33  * @details
34  * Calculated as in Open Office:
35  * <pre>
36  * a+bi
37  * 2.0 * sin(a) * cosh(b)
38  * real = ------------------------------
39  * cosh(2.0 * b) - cos(2.0 * a)
40  *
41  * -2.0 * cos(a) * sinh(b)
42  * imag = ------------------------------
43  * cosh(2.0 * b) - cos(2.0 * a)
44  * </pre>
45  * https://wiki.openoffice.org/wiki/Documentation/How_Tos/Calc:_IMCSC_function
46  */
47 complex ccsc(complex z)
48 {
49  complex w;
50  double a, b;
51  double d;
52 
53  a = creal(z);
54  b = cimag(z);
55  d = cosh(2.0 * b) - cos(2.0 * a);
56 
57  if (d == 0.0) {
58  w = cpack(HUGE, HUGE); // TODO: INF, INF
59  } else {
60  w = cpack((2.0 * sin(a) * cosh(b) / d), (-2.0 * cos(a) * sinh(b) / d));
61  }
62 
63  return w;
64 }
double cos(double x)
Trigonometric cosine function.
Definition: cos.c:87
complex cpack(double x, double y)
Pack two real numbers into a complex number.
Definition: prim.c:71
double cimag(complex z)
Imaginary part of complex number.
Definition: prim.c:47
#define HUGE
Definition: prim.h:40
double creal(complex z)
Real part of complex number.
Definition: prim.c:38
double sinh(double x)
Hyperbolic sine function.
Definition: sinh.c:81
complex ccsc(complex z)
Cosecant of a complex number.
Definition: ccsc.c:47
double cosh(double x)
Hyperbolic cosine function.
Definition: cosh.c:84
double sin(double x)
Trigonometric sine function.
Definition: sin.c:87