ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
libm.h
Go to the documentation of this file.
1//==========================================================
2// AUTHOR : alcanderian@gmail.com
3// DATE : 2023-01-06
4//==========================================================
5
6#ifndef MODULE_BASE_ABAUCS_LIBM_H
7#define MODULE_BASE_ABAUCS_LIBM_H
8
9#include <complex>
10#include <cmath>
11
12namespace ModuleBase
13{
14namespace libm
15{
16
17#ifdef USE_ABACUS_LIBM
18
19double __exp (double x);
20double __cos (double x);
21double __sin (double x);
22void __sincos (double x, double *sinx, double *cosx);
23std::complex<double> __cexp (const std::complex<double> &x);
24
25#else
26
27inline double __exp (double x) { return std::exp(x); };
28inline double __cos (double x) { return std::cos(x); };
29inline double __sin (double x) { return std::sin(x); };
30inline void __sincos (double x, double *sinx, double *cosx) { sincos(x, sinx, cosx); };
31inline std::complex<double> __cexp (const std::complex<double> &x) { return std::exp(x); }
32
33#endif
34
35inline float __expf (float x) { return std::exp(x); };
36inline float __cosf (float x) { return std::cos(x); };
37inline float __sinf (float x) { return std::sin(x); };
38inline void __sincosf (float x, float *sinx, float *cosx) { sincosf(x, sinx, cosx); };
39inline std::complex<float> __cexpf (const std::complex<float> &x) { return std::exp(x); }
40
41template<typename Tp> Tp exp(Tp x);
42template<typename Tp> Tp cos(Tp x);
43template<typename Tp> Tp sin(Tp x);
44template<typename Tp> void sincos(Tp x, Tp *s, Tp *c);
45template<typename Tp> std::complex<Tp> exp(const std::complex<Tp> &x);
46
47template<> inline double exp(double x) { return __exp(x); }
48template<> inline double cos(double x) { return __cos(x); }
49template<> inline double sin(double x) { return __sin(x); }
50template<> inline void sincos(double x, double *s, double *c) { __sincos(x, s, c); }
51template<> inline std::complex<double> exp(const std::complex<double> &x) { return __cexp(x); }
52
53template<> inline float exp(float x) { return __expf(x); }
54template<> inline float cos(float x) { return __cosf(x); }
55template<> inline float sin(float x) { return __sinf(x); }
56template<> inline void sincos(float x, float *s, float *c) { __sincosf(x, s, c); }
57template<> inline std::complex<float> exp(const std::complex<float> &x) { return __cexpf(x); }
58
59};
60};
61
62#endif
float __expf(float x)
Definition libm.h:35
float __cosf(float x)
Definition libm.h:36
void __sincosf(float x, float *sinx, float *cosx)
Definition libm.h:38
double __cos(double x)
Definition libm.h:28
void __sincos(double x, double *sinx, double *cosx)
Definition libm.h:30
std::complex< float > __cexpf(const std::complex< float > &x)
Definition libm.h:39
double x[440]
Definition sincos.cpp:28
double __exp(double x)
Definition exp.cpp:313
float __sinf(float x)
Definition libm.h:37
double __sin(double x)
Definition libm.h:29
std::complex< double > __cexp(const std::complex< double > &x)
Definition cexp.cpp:151
void sincos(Tp x, Tp *s, Tp *c)
Definition array_pool.h:6