liba 0.1.15
An algorithm library based on C/C++
Loading...
Searching...
No Matches
complex.h
Go to the documentation of this file.
1
5
6#ifndef LIBA_COMPLEX_H
7#define LIBA_COMPLEX_H
8
9#include "a.h"
10
16
17/* clang-format off */
19#define A_COMPLEX_C(real, imag) {a_real_c(real), a_real_c(imag)}
20/* clang-format on */
21
23#define a_complex_c(x) a_cast_s(a_complex, x)
24#define a_complex_(_, x) a_cast_s(a_complex _, x)
25
34
35#if defined(__cplusplus)
36extern "C" {
37#endif /* __cplusplus */
38#if defined(LIBA_COMPLEX_C)
40#undef A_INTERN
41#define A_INTERN A_INLINE
43#endif /* LIBA_COMPLEX_C */
44
51static A_INLINE void a_complex_rect(a_complex *ctx, a_real real, a_real imag)
52{
53 ctx->real = real;
54 ctx->imag = imag;
55}
56
63A_EXTERN void a_complex_polar(a_complex *ctx, a_real rho, a_real theta);
64
71A_EXTERN unsigned int a_complex_parse(a_complex *ctx, char const *str);
72
80
88
89/* Properties of complex numbers */
90
97
104
111
118
119/* Complex arithmetic operators */
120
126#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
127A_EXTERN void a_complex_proj(a_complex *ctx, a_complex z);
128#endif /* A_HAVE_INLINE */
129A_EXTERN void a_complex_proj_(a_complex *ctx);
130#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
131A_INTERN void a_complex_proj(a_complex *ctx, a_complex z)
132{
133 a_complex_proj_(&z);
134 *ctx = z;
135}
136#endif /* A_HAVE_INLINE */
137
143#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
144A_EXTERN void a_complex_conj(a_complex *ctx, a_complex z);
145#endif /* A_HAVE_INLINE */
146#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
147A_INTERN void a_complex_conj(a_complex *ctx, a_complex z)
148{
149 ctx->real = +z.real;
150 ctx->imag = -z.imag;
151}
152#endif /* A_HAVE_INLINE */
153#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
154A_EXTERN void a_complex_conj_(a_complex *ctx);
155#endif /* A_HAVE_INLINE */
156#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
157A_INTERN void a_complex_conj_(a_complex *ctx)
158{
159 ctx->imag = -ctx->imag;
160}
161#endif /* A_HAVE_INLINE */
162
168#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
169A_EXTERN void a_complex_neg(a_complex *ctx, a_complex z);
170#endif /* A_HAVE_INLINE */
171#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
172A_INTERN void a_complex_neg(a_complex *ctx, a_complex z)
173{
174 ctx->real = -z.real;
175 ctx->imag = -z.imag;
176}
177#endif /* A_HAVE_INLINE */
178#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
179A_EXTERN void a_complex_neg_(a_complex *ctx);
180#endif /* A_HAVE_INLINE */
181#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
182A_INTERN void a_complex_neg_(a_complex *ctx)
183{
184 ctx->real = -ctx->real;
185 ctx->imag = -ctx->imag;
186}
187#endif /* A_HAVE_INLINE */
188
195#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
196A_EXTERN void a_complex_add(a_complex *ctx, a_complex x, a_complex y);
197#endif /* A_HAVE_INLINE */
198#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
199A_INTERN void a_complex_add(a_complex *ctx, a_complex x, a_complex y)
200{
201 ctx->real = x.real + y.real;
202 ctx->imag = x.imag + y.imag;
203}
204#endif /* A_HAVE_INLINE */
205#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
206A_EXTERN void a_complex_add_(a_complex *ctx, a_complex z);
207#endif /* A_HAVE_INLINE */
208#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
209A_INTERN void a_complex_add_(a_complex *ctx, a_complex z)
210{
211 ctx->real += z.real;
212 ctx->imag += z.imag;
213}
214#endif /* A_HAVE_INLINE */
215#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
216A_EXTERN void a_complex_add_real(a_complex *ctx, a_complex x, a_real y);
217#endif /* A_HAVE_INLINE */
218#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
219A_INTERN void a_complex_add_real(a_complex *ctx, a_complex x, a_real y)
220{
221 ctx->real = x.real + y;
222 ctx->imag = x.imag;
223}
224#endif /* A_HAVE_INLINE */
225#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
226A_EXTERN void a_complex_add_real_(a_complex *ctx, a_real x);
227#endif /* A_HAVE_INLINE */
228#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
229A_INTERN void a_complex_add_real_(a_complex *ctx, a_real x)
230{
231 ctx->real += x;
232}
233#endif /* A_HAVE_INLINE */
234#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
235A_EXTERN void a_complex_add_imag(a_complex *ctx, a_complex x, a_real y);
236#endif /* A_HAVE_INLINE */
237#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
238A_INTERN void a_complex_add_imag(a_complex *ctx, a_complex x, a_real y)
239{
240 ctx->real = x.real;
241 ctx->imag = x.imag + y;
242}
243#endif /* A_HAVE_INLINE */
244#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
245A_EXTERN void a_complex_add_imag_(a_complex *ctx, a_real x);
246#endif /* A_HAVE_INLINE */
247#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
248A_INTERN void a_complex_add_imag_(a_complex *ctx, a_real x)
249{
250 ctx->imag += x;
251}
252#endif /* A_HAVE_INLINE */
253
260#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
261A_EXTERN void a_complex_sub(a_complex *ctx, a_complex x, a_complex y);
262#endif /* A_HAVE_INLINE */
263#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
264A_INTERN void a_complex_sub(a_complex *ctx, a_complex x, a_complex y)
265{
266 ctx->real = x.real - y.real;
267 ctx->imag = x.imag - y.imag;
268}
269#endif /* A_HAVE_INLINE */
270#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
271A_EXTERN void a_complex_sub_(a_complex *ctx, a_complex z);
272#endif /* A_HAVE_INLINE */
273#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
274A_INTERN void a_complex_sub_(a_complex *ctx, a_complex z)
275{
276 ctx->real -= z.real;
277 ctx->imag -= z.imag;
278}
279#endif /* A_HAVE_INLINE */
280#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
281A_EXTERN void a_complex_sub_real(a_complex *ctx, a_complex x, a_real y);
282#endif /* A_HAVE_INLINE */
283#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
284A_INTERN void a_complex_sub_real(a_complex *ctx, a_complex x, a_real y)
285{
286 ctx->real = x.real - y;
287 ctx->imag = x.imag;
288}
289#endif /* A_HAVE_INLINE */
290#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
291A_EXTERN void a_complex_sub_real_(a_complex *ctx, a_real x);
292#endif /* A_HAVE_INLINE */
293#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
294A_INTERN void a_complex_sub_real_(a_complex *ctx, a_real x)
295{
296 ctx->real -= x;
297}
298#endif /* A_HAVE_INLINE */
299#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
300A_EXTERN void a_complex_sub_imag(a_complex *ctx, a_complex x, a_real y);
301#endif /* A_HAVE_INLINE */
302#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
303A_INTERN void a_complex_sub_imag(a_complex *ctx, a_complex x, a_real y)
304{
305 ctx->real = x.real;
306 ctx->imag = x.imag - y;
307}
308#endif /* A_HAVE_INLINE */
309#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
310A_EXTERN void a_complex_sub_imag_(a_complex *ctx, a_real x);
311#endif /* A_HAVE_INLINE */
312#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
313A_INTERN void a_complex_sub_imag_(a_complex *ctx, a_real x)
314{
315 ctx->imag -= x;
316}
317#endif /* A_HAVE_INLINE */
318
325#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
326A_EXTERN void a_complex_mul(a_complex *ctx, a_complex x, a_complex y);
327#endif /* A_HAVE_INLINE */
328A_EXTERN void a_complex_mul_(a_complex *ctx, a_complex z);
329#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
330A_INTERN void a_complex_mul(a_complex *ctx, a_complex x, a_complex y)
331{
332 a_complex_mul_(&x, y);
333 *ctx = x;
334}
335#endif /* A_HAVE_INLINE */
336#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
337A_EXTERN void a_complex_mul_real(a_complex *ctx, a_complex x, a_real y);
338#endif /* A_HAVE_INLINE */
339#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
340A_INTERN void a_complex_mul_real(a_complex *ctx, a_complex x, a_real y)
341{
342 ctx->real = x.real * y;
343 ctx->imag = x.imag * y;
344}
345#endif /* A_HAVE_INLINE */
346#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
347A_EXTERN void a_complex_mul_real_(a_complex *ctx, a_real x);
348#endif /* A_HAVE_INLINE */
349#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
350A_INTERN void a_complex_mul_real_(a_complex *ctx, a_real x)
351{
352 ctx->real *= x;
353 ctx->imag *= x;
354}
355#endif /* A_HAVE_INLINE */
356#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
357A_EXTERN void a_complex_mul_imag(a_complex *ctx, a_complex x, a_real y);
358#endif /* A_HAVE_INLINE */
359#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
360A_INTERN void a_complex_mul_imag(a_complex *ctx, a_complex x, a_real y)
361{
362 ctx->real = -x.imag * y;
363 ctx->imag = x.real * y;
364}
365#endif /* A_HAVE_INLINE */
366#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
367A_EXTERN void a_complex_mul_imag_(a_complex *ctx, a_real x);
368#endif /* A_HAVE_INLINE */
369#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
370A_INTERN void a_complex_mul_imag_(a_complex *ctx, a_real x)
371{
372 a_real const real = ctx->real;
373 ctx->real = -ctx->imag * x;
374 ctx->imag = real * x;
375}
376#endif /* A_HAVE_INLINE */
377
384#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
385A_EXTERN void a_complex_div(a_complex *ctx, a_complex x, a_complex y);
386#endif /* A_HAVE_INLINE */
387A_EXTERN void a_complex_div_(a_complex *ctx, a_complex z);
388#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
389A_INTERN void a_complex_div(a_complex *ctx, a_complex x, a_complex y)
390{
391 a_complex_div_(&x, y);
392 *ctx = x;
393}
394#endif /* A_HAVE_INLINE */
395#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
396A_EXTERN void a_complex_div_real(a_complex *ctx, a_complex x, a_real y);
397#endif /* A_HAVE_INLINE */
398#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
399A_INTERN void a_complex_div_real(a_complex *ctx, a_complex x, a_real y)
400{
401 ctx->real = x.real / y;
402 ctx->imag = x.imag / y;
403}
404#endif /* A_HAVE_INLINE */
405#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
406A_EXTERN void a_complex_div_real_(a_complex *ctx, a_real x);
407#endif /* A_HAVE_INLINE */
408#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
409A_INTERN void a_complex_div_real_(a_complex *ctx, a_real x)
410{
411 ctx->real /= x;
412 ctx->imag /= x;
413}
414#endif /* A_HAVE_INLINE */
415#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
416A_EXTERN void a_complex_div_imag(a_complex *ctx, a_complex x, a_real y);
417#endif /* A_HAVE_INLINE */
418#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
419A_INTERN void a_complex_div_imag(a_complex *ctx, a_complex x, a_real y)
420{
421 ctx->real = -x.imag / y;
422 ctx->imag = x.real / y;
423}
424#endif /* A_HAVE_INLINE */
425#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
426A_EXTERN void a_complex_div_imag_(a_complex *ctx, a_real x);
427#endif /* A_HAVE_INLINE */
428#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
429A_INTERN void a_complex_div_imag_(a_complex *ctx, a_real x)
430{
431 a_real const real = ctx->real;
432 ctx->real = -ctx->imag / x;
433 ctx->imag = real / x;
434}
435#endif /* A_HAVE_INLINE */
436
442#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
443A_EXTERN void a_complex_inv(a_complex *ctx, a_complex z);
444#endif /* A_HAVE_INLINE */
445A_EXTERN void a_complex_inv_(a_complex *ctx);
446#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
447A_INTERN void a_complex_inv(a_complex *ctx, a_complex z)
448{
449 a_complex_inv_(&z);
450 *ctx = z;
451}
452#endif /* A_HAVE_INLINE */
453
454/* Elementary Complex Functions */
455
461#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
462A_EXTERN void a_complex_sqrt(a_complex *ctx, a_complex z);
463#endif /* A_HAVE_INLINE */
464A_EXTERN void a_complex_sqrt_(a_complex *ctx);
465A_EXTERN void a_complex_sqrt_real(a_complex *ctx, a_real x);
466#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
467A_INTERN void a_complex_sqrt(a_complex *ctx, a_complex z)
468{
469 a_complex_sqrt_(&z);
470 *ctx = z;
471}
472#endif /* A_HAVE_INLINE */
473
480#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
481A_EXTERN void a_complex_pow(a_complex *ctx, a_complex z, a_complex a);
482#endif /* A_HAVE_INLINE */
483A_EXTERN void a_complex_pow_(a_complex *ctx, a_complex a);
484#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
485A_INTERN void a_complex_pow(a_complex *ctx, a_complex z, a_complex a)
486{
487 a_complex_pow_(&z, a);
488 *ctx = z;
489}
490#endif /* A_HAVE_INLINE */
491
498#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
500#endif /* A_HAVE_INLINE */
501A_EXTERN void a_complex_pow_real_(a_complex *ctx, a_real a);
502#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
503A_INTERN void a_complex_pow_real(a_complex *ctx, a_complex z, a_real a)
504{
505 a_complex_pow_real_(&z, a);
506 *ctx = z;
507}
508#endif /* A_HAVE_INLINE */
509
515#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
516A_EXTERN void a_complex_exp(a_complex *ctx, a_complex z);
517#endif /* A_HAVE_INLINE */
518A_EXTERN void a_complex_exp_(a_complex *ctx);
519#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
520A_INTERN void a_complex_exp(a_complex *ctx, a_complex z)
521{
522 a_complex_exp_(&z);
523 *ctx = z;
524}
525#endif /* A_HAVE_INLINE */
526
532#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
533A_EXTERN void a_complex_log(a_complex *ctx, a_complex z);
534#endif /* A_HAVE_INLINE */
535A_EXTERN void a_complex_log_(a_complex *ctx);
536#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
537A_INTERN void a_complex_log(a_complex *ctx, a_complex z)
538{
539 a_complex_log_(&z);
540 *ctx = z;
541}
542#endif /* A_HAVE_INLINE */
543
549#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
550A_EXTERN void a_complex_log2(a_complex *ctx, a_complex z);
551#endif /* A_HAVE_INLINE */
552A_EXTERN void a_complex_log2_(a_complex *ctx);
553#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
554A_INTERN void a_complex_log2(a_complex *ctx, a_complex z)
555{
556 a_complex_log2_(&z);
557 *ctx = z;
558}
559#endif /* A_HAVE_INLINE */
560
566#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
567A_EXTERN void a_complex_log10(a_complex *ctx, a_complex z);
568#endif /* A_HAVE_INLINE */
569A_EXTERN void a_complex_log10_(a_complex *ctx);
570#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
571A_INTERN void a_complex_log10(a_complex *ctx, a_complex z)
572{
573 a_complex_log10_(&z);
574 *ctx = z;
575}
576#endif /* A_HAVE_INLINE */
577
584#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
585A_EXTERN void a_complex_logb(a_complex *ctx, a_complex z, a_complex b);
586#endif /* A_HAVE_INLINE */
587A_EXTERN void a_complex_logb_(a_complex *ctx, a_complex b);
588#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
589A_INTERN void a_complex_logb(a_complex *ctx, a_complex z, a_complex b)
590{
591 a_complex_logb_(&z, b);
592 *ctx = z;
593}
594#endif /* A_HAVE_INLINE */
595
596/* Complex Trigonometric Functions */
597
603#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
604A_EXTERN void a_complex_sin(a_complex *ctx, a_complex z);
605#endif /* A_HAVE_INLINE */
606A_EXTERN void a_complex_sin_(a_complex *ctx);
607#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
608A_INTERN void a_complex_sin(a_complex *ctx, a_complex z)
609{
610 a_complex_sin_(&z);
611 *ctx = z;
612}
613#endif /* A_HAVE_INLINE */
614
620#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
621A_EXTERN void a_complex_cos(a_complex *ctx, a_complex z);
622#endif /* A_HAVE_INLINE */
623A_EXTERN void a_complex_cos_(a_complex *ctx);
624#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
625A_INTERN void a_complex_cos(a_complex *ctx, a_complex z)
626{
627 a_complex_cos_(&z);
628 *ctx = z;
629}
630#endif /* A_HAVE_INLINE */
631
637#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
638A_EXTERN void a_complex_tan(a_complex *ctx, a_complex z);
639#endif /* A_HAVE_INLINE */
640A_EXTERN void a_complex_tan_(a_complex *ctx);
641#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
642A_INTERN void a_complex_tan(a_complex *ctx, a_complex z)
643{
644 a_complex_tan_(&z);
645 *ctx = z;
646}
647#endif /* A_HAVE_INLINE */
648
654#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
655A_EXTERN void a_complex_sec(a_complex *ctx, a_complex z);
656#endif /* A_HAVE_INLINE */
657A_EXTERN void a_complex_sec_(a_complex *ctx);
658#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
659A_INTERN void a_complex_sec(a_complex *ctx, a_complex z)
660{
661 a_complex_sec_(&z);
662 *ctx = z;
663}
664#endif /* A_HAVE_INLINE */
665
671#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
672A_EXTERN void a_complex_csc(a_complex *ctx, a_complex z);
673#endif /* A_HAVE_INLINE */
674A_EXTERN void a_complex_csc_(a_complex *ctx);
675#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
676A_INTERN void a_complex_csc(a_complex *ctx, a_complex z)
677{
678 a_complex_csc_(&z);
679 *ctx = z;
680}
681#endif /* A_HAVE_INLINE */
682
688#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
689A_EXTERN void a_complex_cot(a_complex *ctx, a_complex z);
690#endif /* A_HAVE_INLINE */
691A_EXTERN void a_complex_cot_(a_complex *ctx);
692#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
693A_INTERN void a_complex_cot(a_complex *ctx, a_complex z)
694{
695 a_complex_cot_(&z);
696 *ctx = z;
697}
698#endif /* A_HAVE_INLINE */
699
700/* Inverse Complex Trigonometric Functions */
701
707#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
708A_EXTERN void a_complex_asin(a_complex *ctx, a_complex z);
709#endif /* A_HAVE_INLINE */
710A_EXTERN void a_complex_asin_(a_complex *ctx);
711A_EXTERN void a_complex_asin_real(a_complex *ctx, a_real x);
712#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
713A_INTERN void a_complex_asin(a_complex *ctx, a_complex z)
714{
715 a_complex_asin_(&z);
716 *ctx = z;
717}
718#endif /* A_HAVE_INLINE */
719
725#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
726A_EXTERN void a_complex_acos(a_complex *ctx, a_complex z);
727#endif /* A_HAVE_INLINE */
728A_EXTERN void a_complex_acos_(a_complex *ctx);
729A_EXTERN void a_complex_acos_real(a_complex *ctx, a_real x);
730#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
731A_INTERN void a_complex_acos(a_complex *ctx, a_complex z)
732{
733 a_complex_acos_(&z);
734 *ctx = z;
735}
736#endif /* A_HAVE_INLINE */
737
743#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
744A_EXTERN void a_complex_atan(a_complex *ctx, a_complex z);
745#endif /* A_HAVE_INLINE */
746A_EXTERN void a_complex_atan_(a_complex *ctx);
747#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
748A_INTERN void a_complex_atan(a_complex *ctx, a_complex z)
749{
750 a_complex_atan_(&z);
751 *ctx = z;
752}
753#endif /* A_HAVE_INLINE */
754
760#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
761A_EXTERN void a_complex_asec(a_complex *ctx, a_complex z);
762#endif /* A_HAVE_INLINE */
763A_EXTERN void a_complex_asec_(a_complex *ctx);
764A_EXTERN void a_complex_asec_real(a_complex *ctx, a_real x);
765#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
766A_INTERN void a_complex_asec(a_complex *ctx, a_complex z)
767{
768 a_complex_asec_(&z);
769 *ctx = z;
770}
771#endif /* A_HAVE_INLINE */
772
778#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
779A_EXTERN void a_complex_acsc(a_complex *ctx, a_complex z);
780#endif /* A_HAVE_INLINE */
781A_EXTERN void a_complex_acsc_(a_complex *ctx);
782A_EXTERN void a_complex_acsc_real(a_complex *ctx, a_real x);
783#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
784A_INTERN void a_complex_acsc(a_complex *ctx, a_complex z)
785{
786 a_complex_acsc_(&z);
787 *ctx = z;
788}
789#endif /* A_HAVE_INLINE */
790
796#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
797A_EXTERN void a_complex_acot(a_complex *ctx, a_complex z);
798#endif /* A_HAVE_INLINE */
799A_EXTERN void a_complex_acot_(a_complex *ctx);
800#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
801A_INTERN void a_complex_acot(a_complex *ctx, a_complex z)
802{
803 a_complex_acot_(&z);
804 *ctx = z;
805}
806#endif /* A_HAVE_INLINE */
807
808/* Complex Hyperbolic Functions */
809
815#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
816A_EXTERN void a_complex_sinh(a_complex *ctx, a_complex z);
817#endif /* A_HAVE_INLINE */
818A_EXTERN void a_complex_sinh_(a_complex *ctx);
819#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
820A_INTERN void a_complex_sinh(a_complex *ctx, a_complex z)
821{
822 a_complex_sinh_(&z);
823 *ctx = z;
824}
825#endif /* A_HAVE_INLINE */
826
832#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
833A_EXTERN void a_complex_cosh(a_complex *ctx, a_complex z);
834#endif /* A_HAVE_INLINE */
835A_EXTERN void a_complex_cosh_(a_complex *ctx);
836#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
837A_INTERN void a_complex_cosh(a_complex *ctx, a_complex z)
838{
839 a_complex_cosh_(&z);
840 *ctx = z;
841}
842#endif /* A_HAVE_INLINE */
843
849#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
850A_EXTERN void a_complex_tanh(a_complex *ctx, a_complex z);
851#endif /* A_HAVE_INLINE */
852A_EXTERN void a_complex_tanh_(a_complex *ctx);
853#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
854A_INTERN void a_complex_tanh(a_complex *ctx, a_complex z)
855{
856 a_complex_tanh_(&z);
857 *ctx = z;
858}
859#endif /* A_HAVE_INLINE */
860
866#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
867A_EXTERN void a_complex_sech(a_complex *ctx, a_complex z);
868#endif /* A_HAVE_INLINE */
869A_EXTERN void a_complex_sech_(a_complex *ctx);
870#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
871A_INTERN void a_complex_sech(a_complex *ctx, a_complex z)
872{
873 a_complex_sech_(&z);
874 *ctx = z;
875}
876#endif /* A_HAVE_INLINE */
877
883#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
884A_EXTERN void a_complex_csch(a_complex *ctx, a_complex z);
885#endif /* A_HAVE_INLINE */
886A_EXTERN void a_complex_csch_(a_complex *ctx);
887#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
888A_INTERN void a_complex_csch(a_complex *ctx, a_complex z)
889{
890 a_complex_csch_(&z);
891 *ctx = z;
892}
893#endif /* A_HAVE_INLINE */
894
900#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
901A_EXTERN void a_complex_coth(a_complex *ctx, a_complex z);
902#endif /* A_HAVE_INLINE */
903A_EXTERN void a_complex_coth_(a_complex *ctx);
904#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
905A_INTERN void a_complex_coth(a_complex *ctx, a_complex z)
906{
907 a_complex_coth_(&z);
908 *ctx = z;
909}
910#endif /* A_HAVE_INLINE */
911
912/* Inverse Complex Hyperbolic Functions */
913
919#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
920A_EXTERN void a_complex_asinh(a_complex *ctx, a_complex z);
921#endif /* A_HAVE_INLINE */
922A_EXTERN void a_complex_asinh_(a_complex *ctx);
923#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
924A_INTERN void a_complex_asinh(a_complex *ctx, a_complex z)
925{
926 a_complex_asinh_(&z);
927 *ctx = z;
928}
929#endif /* A_HAVE_INLINE */
930
936#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
937A_EXTERN void a_complex_acosh(a_complex *ctx, a_complex z);
938#endif /* A_HAVE_INLINE */
939A_EXTERN void a_complex_acosh_(a_complex *ctx);
940A_EXTERN void a_complex_acosh_real(a_complex *ctx, a_real x);
941#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
942A_INTERN void a_complex_acosh(a_complex *ctx, a_complex z)
943{
944 a_complex_acosh_(&z);
945 *ctx = z;
946}
947#endif /* A_HAVE_INLINE */
948
954#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
955A_EXTERN void a_complex_atanh(a_complex *ctx, a_complex z);
956#endif /* A_HAVE_INLINE */
957A_EXTERN void a_complex_atanh_(a_complex *ctx);
958A_EXTERN void a_complex_atanh_real(a_complex *ctx, a_real x);
959#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
960A_INTERN void a_complex_atanh(a_complex *ctx, a_complex z)
961{
962 a_complex_atanh_(&z);
963 *ctx = z;
964}
965#endif /* A_HAVE_INLINE */
966
972#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
973A_EXTERN void a_complex_asech(a_complex *ctx, a_complex z);
974#endif /* A_HAVE_INLINE */
975A_EXTERN void a_complex_asech_(a_complex *ctx);
976#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
977A_INTERN void a_complex_asech(a_complex *ctx, a_complex z)
978{
979 a_complex_asech_(&z);
980 *ctx = z;
981}
982#endif /* A_HAVE_INLINE */
983
989#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
990A_EXTERN void a_complex_acsch(a_complex *ctx, a_complex z);
991#endif /* A_HAVE_INLINE */
992A_EXTERN void a_complex_acsch_(a_complex *ctx);
993#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
994A_INTERN void a_complex_acsch(a_complex *ctx, a_complex z)
995{
996 a_complex_acsch_(&z);
997 *ctx = z;
998}
999#endif /* A_HAVE_INLINE */
1000
1006#if !defined A_HAVE_INLINE || defined(LIBA_COMPLEX_C)
1007A_EXTERN void a_complex_acoth(a_complex *ctx, a_complex z);
1008#endif /* A_HAVE_INLINE */
1009A_EXTERN void a_complex_acoth_(a_complex *ctx);
1010#if defined(A_HAVE_INLINE) || defined(LIBA_COMPLEX_C)
1011A_INTERN void a_complex_acoth(a_complex *ctx, a_complex z)
1012{
1013 a_complex_acoth_(&z);
1014 *ctx = z;
1015}
1016#endif /* A_HAVE_INLINE */
1017
1018#if defined(LIBA_COMPLEX_C)
1020#undef A_INTERN
1021#define A_INTERN static A_INLINE
1023#endif /* LIBA_COMPLEX_C */
1024#if defined(__cplusplus)
1025} /* extern "C" */
1026#endif /* __cplusplus */
1027
1029
1030#endif /* a/complex.h */
algorithm library
void a_complex_asin(a_complex *ctx, a_complex z)
computes the complex arc sine
void a_complex_polar(a_complex *ctx, a_real rho, a_real theta)
constructs a complex number from polar form
void a_complex_coth(a_complex *ctx, a_complex z)
computes the complex hyperbolic cotangent
void a_complex_conj(a_complex *ctx, a_complex z)
computes the complex conjugate
void a_complex_asech(a_complex *ctx, a_complex z)
computes the complex arc hyperbolic secant
void a_complex_pow_real(a_complex *ctx, a_complex z, a_real a)
complex number z raised to real power a
void a_complex_sub(a_complex *ctx, a_complex x, a_complex y)
subtraction of complex numbers
void a_complex_csch(a_complex *ctx, a_complex z)
computes the complex hyperbolic cosecant
void a_complex_sec(a_complex *ctx, a_complex z)
computes the complex secant
void a_complex_pow(a_complex *ctx, a_complex z, a_complex a)
complex number z raised to complex power a
a_bool a_complex_eq(a_complex x, a_complex y)
complex number x is equal to complex number y
void a_complex_csc(a_complex *ctx, a_complex z)
computes the complex cosecant
void a_complex_atan(a_complex *ctx, a_complex z)
computes the complex arc tangent
a_bool a_complex_ne(a_complex x, a_complex y)
complex number x is not equal to complex number y
void a_complex_inv(a_complex *ctx, a_complex z)
inverse of a complex number
void a_complex_asinh(a_complex *ctx, a_complex z)
computes the complex arc hyperbolic sine
void a_complex_acot(a_complex *ctx, a_complex z)
computes the complex arc cotangent
void a_complex_acsc(a_complex *ctx, a_complex z)
computes the complex arc cosecant
void a_complex_acos(a_complex *ctx, a_complex z)
computes the complex arc cosine
a_real a_complex_arg(a_complex z)
computes the phase angle of a complex number
void a_complex_tan(a_complex *ctx, a_complex z)
computes the complex tangent
void a_complex_cos(a_complex *ctx, a_complex z)
computes the complex cosine
void a_complex_div(a_complex *ctx, a_complex x, a_complex y)
division of complex numbers
void a_complex_sinh(a_complex *ctx, a_complex z)
computes the complex hyperbolic sine
void a_complex_acsch(a_complex *ctx, a_complex z)
computes the complex arc hyperbolic cosecant
void a_complex_sech(a_complex *ctx, a_complex z)
computes the complex hyperbolic secant
void a_complex_tanh(a_complex *ctx, a_complex z)
computes the complex hyperbolic tangent
void a_complex_asec(a_complex *ctx, a_complex z)
computes the complex arc secant
void a_complex_acoth(a_complex *ctx, a_complex z)
computes the complex arc hyperbolic cotangent
void a_complex_log(a_complex *ctx, a_complex z)
computes the complex natural logarithm
void a_complex_sin(a_complex *ctx, a_complex z)
computes the complex sine
void a_complex_logb(a_complex *ctx, a_complex z, a_complex b)
computes the complex base-b logarithm
void a_complex_neg(a_complex *ctx, a_complex z)
computes the complex negative
void a_complex_sqrt(a_complex *ctx, a_complex z)
computes the complex square root
void a_complex_mul(a_complex *ctx, a_complex x, a_complex y)
multiplication of complex numbers
a_real a_complex_logabs(a_complex z)
computes the natural logarithm of magnitude of a complex number
void a_complex_acosh(a_complex *ctx, a_complex z)
computes the complex arc hyperbolic cosine
a_real a_complex_abs(a_complex z)
computes the magnitude of a complex number
unsigned int a_complex_parse(a_complex *ctx, char const *str)
parse a string into a complex number
void a_complex_cot(a_complex *ctx, a_complex z)
computes the complex cotangent
void a_complex_add(a_complex *ctx, a_complex x, a_complex y)
addition of complex numbers
void a_complex_atanh(a_complex *ctx, a_complex z)
computes the complex arc hyperbolic tangent
void a_complex_log2(a_complex *ctx, a_complex z)
computes the complex base-2 logarithm
void a_complex_cosh(a_complex *ctx, a_complex z)
computes the complex hyperbolic cosine
void a_complex_exp(a_complex *ctx, a_complex z)
computes the complex base-e exponential
static void a_complex_rect(a_complex *ctx, a_real real, a_real imag)
constructs a complex number from real and imaginary parts
Definition complex.h:51
void a_complex_log10(a_complex *ctx, a_complex z)
computes the complex base-10 logarithm
void a_complex_proj(a_complex *ctx, a_complex z)
computes the projection on Riemann sphere
a_real a_complex_abs2(a_complex z)
computes the squared magnitude of a complex number
double a_real
compiler built-in floating-point number type
Definition a.h:1012
bool a_bool
type, capable of holding one of the two values: 1 and 0
Definition a.h:320
instance structure for complex number
Definition complex.h:30
a_real real
Definition complex.h:31
a_real imag
Definition complex.h:32