少年修仙传客户端基础资源
hch
2024-04-01 d01413b00ef631ac20347716b23818b0b811f65f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/**
 * \file
* C99 Complex math cross-platform support code
*
* Author:
*    Joao Matos (joao.matos@xamarin.com)
*
* Copyright 2015 Xamarin, Inc (http://www.xamarin.com)
* Licensed under the MIT license. See LICENSE file in the project root for full license information.
*/
 
#include <config.h>
#include <glib.h>
 
#if !defined (HAVE_COMPLEX_H) || (defined (ANDROID_UNIFIED_HEADERS) && __ANDROID_API__ < 23)
#include <../../support/libm/complex.h>
#else
#include <complex.h>
#endif
 
#define _USE_MATH_DEFINES // needed by MSVC to define math constants
#include <math.h>
 
#ifdef _MSC_VER
 
#define double_complex _C_double_complex
 
static inline
double_complex mono_double_complex_make(gdouble re, gdouble im)
{
    return _Cbuild (re, im);
}
 
static inline
double_complex mono_double_complex_scalar_div(double_complex c, gdouble s)
{
    return mono_double_complex_make(creal(c) / s, cimag(c) / s);
}
 
static inline
double_complex mono_double_complex_scalar_mul(double_complex c, gdouble s)
{
    return mono_double_complex_make(creal(c) * s, cimag(c) * s);
}
 
static inline
double_complex mono_double_complex_div(double_complex left, double_complex right)
{
    double denom = creal(right) * creal(right) + cimag(right) * cimag(right);
 
    return mono_double_complex_make(
        (creal(left) * creal(right) + cimag(left) * cimag(right)) / denom,
        (-creal(left) * cimag(right) + cimag(left) * creal(right)) / denom);
}
 
static inline
double_complex mono_double_complex_sub(double_complex left, double_complex right)
{
    return mono_double_complex_make(creal(left) - creal(right), cimag(left)
        - cimag(right));
}
 
#else
 
#define double_complex double complex
 
static inline
double_complex mono_double_complex_make(gdouble re, gdouble im)
{
    return re + im * I;
}
 
static inline
double_complex mono_double_complex_scalar_div(double_complex c, gdouble s)
{
    return c / s;
}
 
static inline
double_complex mono_double_complex_scalar_mul(double_complex c, gdouble s)
{
    return c * s;
}
 
static inline
double_complex mono_double_complex_div(double_complex left, double_complex right)
{
    return left / right;
}
 
static inline
double_complex mono_double_complex_sub(double_complex left, double_complex right)
{
    return left - right;
}
 
#endif