[threadpool] Saner default for max number of worker threads on android and ios
[mono-project.git] / mono / utils / mono-complex.h
blob798fddb263b00c2081b43b6e14f066fe2b84dcf6
1 /*
2 * mono-complex.h: C99 Complex math cross-platform support code
4 * Author:
5 * Joao Matos (joao.matos@xamarin.com)
7 * Copyright 2015 Xamarin, Inc (http://www.xamarin.com)
8 */
10 #include <config.h>
11 #include <glib.h>
13 #if !defined (HAVE_COMPLEX_H)
14 #include <../../support/libm/complex.h>
15 #else
16 #include <complex.h>
17 #endif
19 #define _USE_MATH_DEFINES // needed by MSVC to define math constants
20 #include <math.h>
22 #ifdef _MSC_VER
24 #define double_complex _C_double_complex
26 static inline
27 double_complex mono_double_complex_make(gdouble re, gdouble im)
29 return _Cbuild (re, im);
32 static inline
33 double_complex mono_double_complex_scalar_div(double_complex c, gdouble s)
35 return mono_double_complex_make(creal(c) / s, cimag(c) / s);
38 static inline
39 double_complex mono_double_complex_scalar_mul(double_complex c, gdouble s)
41 return mono_double_complex_make(creal(c) * s, cimag(c) * s);
44 static inline
45 double_complex mono_double_complex_div(double_complex left, double_complex right)
47 double denom = creal(right) * creal(right) + cimag(right) * cimag(right);
49 return mono_double_complex_make(
50 (creal(left) * creal(right) + cimag(left) * cimag(right)) / denom,
51 (-creal(left) * cimag(right) + cimag(left) * creal(right)) / denom);
54 static inline
55 double_complex mono_double_complex_sub(double_complex left, double_complex right)
57 return mono_double_complex_make(creal(left) - creal(right), cimag(left)
58 - cimag(right));
61 #else
63 #define double_complex double complex
65 static inline
66 double_complex mono_double_complex_make(gdouble re, gdouble im)
68 return re + im * I;
71 static inline
72 double_complex mono_double_complex_scalar_div(double_complex c, gdouble s)
74 return c / s;
77 static inline
78 double_complex mono_double_complex_scalar_mul(double_complex c, gdouble s)
80 return c * s;
83 static inline
84 double_complex mono_double_complex_div(double_complex left, double_complex right)
86 return left / right;
89 static inline
90 double_complex mono_double_complex_sub(double_complex left, double_complex right)
92 return left - right;
95 #endif