SH4ZAM! 0.1.0
Fast math library for the Sega Dreamcast's SH4 CPU
Loading...
Searching...
No Matches
shz_complex.h
Go to the documentation of this file.
1/*! \file
2 \brief Complex number API
3 \ingroup complex
4
5 This file contains a collection of routines for working
6 with complex (real + imaginary) numbers. The API is mostly
7 modeled after C99's <complex.h>, although it also supports
8 being used from C++ as well.
9
10 \author 2026 Falco Girgis
11
12 \copyright MIT License
13*/
14
15#ifndef SHZ_COMPLEX_H
16#define SHZ_COMPLEX_H
17
18#include "shz_cdefs.h"
19#include <stddef.h>
20
21#define SHZ_CMPLXF(x, y) shz_cinitf(x, y)
22#define SHZ_CMPLXF32(x, y) SHZ_CMPLXF(x, y)
23#define SHZ_I SHZ_CMPLXF32(0.0f, 1.0f)
24
25SHZ_DECLS_BEGIN
26
27typedef struct shz_complex {
28 float real;
29 float imag;
30} shz_complex_t;
31
32typedef shz_complex_t shz_complex;
33
34SHZ_INLINE shz_complex_t shz_cinitf(float real, float imag) SHZ_NOEXCEPT;
35
36SHZ_INLINE bool shz_cequalf(shz_complex_t lhs, shz_complex_t rhs) SHZ_NOEXCEPT;
37
38SHZ_INLINE shz_complex_t shz_caddf(shz_complex_t lhs, shz_complex_t rhs) SHZ_NOEXCEPT;
39
40SHZ_INLINE shz_complex_t shz_csubf(shz_complex_t lhs, shz_complex_t rhs) SHZ_NOEXCEPT;
41
42SHZ_INLINE shz_complex_t shz_cmulf(shz_complex_t lhs, shz_complex_t rhs) SHZ_NOEXCEPT;
43
44SHZ_INLINE shz_complex_t shz_cdivf(shz_complex_t lhs, shz_complex_t rhs) SHZ_NOEXCEPT;
45
46SHZ_INLINE float shz_crealf(shz_complex_t c) SHZ_NOEXCEPT;
47SHZ_INLINE float shz_cimagf(shz_complex_t c) SHZ_NOEXCEPT;
48
49SHZ_INLINE float shz_cabsf(shz_complex_t c) SHZ_NOEXCEPT;
50SHZ_INLINE float shz_cargf(shz_complex_t c) SHZ_NOEXCEPT;
51SHZ_INLINE shz_complex_t shz_conjf(shz_complex_t c) SHZ_NOEXCEPT;
52
53SHZ_INLINE shz_complex_t shz_csqrtf(shz_complex_t c) SHZ_NOEXCEPT;
54SHZ_INLINE shz_complex_t shz_cpowf(shz_complex_t base, shz_complex_t exp) SHZ_NOEXCEPT;
55
56SHZ_INLINE shz_complex_t shz_clogf(shz_complex_t c) SHZ_NOEXCEPT;
57SHZ_INLINE shz_complex_t shz_cexpf(shz_complex_t c) SHZ_NOEXCEPT;
58SHZ_INLINE shz_complex_t shz_clog10f(shz_complex_t c) SHZ_NOEXCEPT;
59
60// shz_sincos_t compat
61SHZ_INLINE shz_complex_t shz_csinf(shz_complex_t c) SHZ_NOEXCEPT;
62/* WIPpity McWIP
63SHZ_INLINE shz_complex_t shz_ccosf(shz_complex_t c) SHZ_NOEXCEPT;
64SHZ_INLINE shz_complex_t shz_ctanf(shz_complex_t c) SHZ_NOEXCEPT;
65SHZ_INLINE shz_complex_t shz_casinf(shz_complex_t c) SHZ_NOEXCEPT;
66SHZ_INLINE shz_complex_t shz_cacosf(shz_complex_t c) SHZ_NOEXCEPT;
67SHZ_INLINE shz_complex_t shz_catanf(shz_complex_t c) SHZ_NOEXCEPT;
68*/
69// hyperbolic equivalents
70
71// to/from 2D matrices
72
73// FFT-needed shit
74void shz_fft(shz_complex_t* s, size_t size) SHZ_NOEXCEPT;
75
76#include "inline/shz_complex.inl.h"
77
78SHZ_DECLS_END
79
80#endif
#define SHZ_CMPLXF(x, y)
Definition shz_complex.h:21
#define SHZ_CMPLXF32(x, y)
Definition shz_complex.h:22