diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-02-06 16:59:24 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-02-06 17:00:03 +0900 |
| commit | 88113df0981142be989e868689bf549cb95f0e6c (patch) | |
| tree | f7da1aba4c90bdf4c1e2a5fbcf7be85fe962e600 /mrbgems/mruby-cmath/src | |
| parent | 2a69f5105c0f40d74a50ffee2b5a910b238aa5d6 (diff) | |
| download | mruby-88113df0981142be989e868689bf549cb95f0e6c.tar.gz mruby-88113df0981142be989e868689bf549cb95f0e6c.zip | |
Fixed compile errors in `cmath.c` in MinGW and macOS.
Diffstat (limited to 'mrbgems/mruby-cmath/src')
| -rw-r--r-- | mrbgems/mruby-cmath/src/cmath.c | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/mrbgems/mruby-cmath/src/cmath.c b/mrbgems/mruby-cmath/src/cmath.c index 9ed34deea..857b58d26 100644 --- a/mrbgems/mruby-cmath/src/cmath.c +++ b/mrbgems/mruby-cmath/src/cmath.c @@ -91,18 +91,40 @@ CXDIVc(mrb_complex a, mrb_complex b) return CX(cr, ci); } + +#else + +#if defined(__cplusplus) && defined(__APPLE__) + +#ifdef MRB_USE_FLOAT32 +typedef std::complex<float> mrb_complex; #else +typedef std::complex<double> mrb_complex; +#endif /* MRB_USE_FLOAT32 */ + +#define CX(r,i) mrb_complex(r,i) +#define creal(c) c.real() +#define cimag(c) c.imag() +#define FC(n) F(n) + +#else /* cpp */ #ifdef MRB_USE_FLOAT32 typedef float _Complex mrb_complex; #else typedef double _Complex mrb_complex; +#endif /* MRB_USE_FLOAT32 */ + +#define CX(r,i) ((r)+(i)*_Complex_I) #endif - -#define CX(r,i) (r+i*I) + #define CXDIVf(x,y) (x)/(y) #define CXDIVc(x,y) (x)/(y) - + +#endif + +#ifndef FC +#define FC(n) F(c ## n) #endif #define DEF_CMATH_METHOD(name) \ @@ -113,7 +135,7 @@ cmath_ ## name(mrb_state *mrb, mrb_value self)\ mrb_float real, imag;\ if (cmath_get_complex(mrb, z, &real, &imag)) {\ mrb_complex c = CX(real,imag);\ - c = F(c ## name)(c);\ + c = FC(name)(c);\ return mrb_complex_new(mrb, creal(c), cimag(c));\ }\ return mrb_float_value(mrb, F(name)(real));\ @@ -138,8 +160,8 @@ cmath_log(mrb_state *mrb, mrb_value self) { if (n == 1) base = M_E; if (cmath_get_complex(mrb, z, &real, &imag) || real < 0.0) { mrb_complex c = CX(real,imag); - c = F(clog)(c); - if (n == 2) c = CXDIVc(c, F(clog)(CX(base,0))); + c = FC(log)(c); + if (n == 2) c = CXDIVc(c, FC(log)(CX(base,0))); return mrb_complex_new(mrb, creal(c), cimag(c)); } if (n == 1) return mrb_float_value(mrb, F(log)(real)); @@ -153,7 +175,7 @@ cmath_log10(mrb_state *mrb, mrb_value self) { mrb_float real, imag; if (cmath_get_complex(mrb, z, &real, &imag) || real < 0.0) { mrb_complex c = CX(real,imag); - c = CXDIVf(F(clog)(c),log(10)); + c = CXDIVf(FC(log)(c),log(10)); return mrb_complex_new(mrb, creal(c), cimag(c)); } return mrb_float_value(mrb, F(log10)(real)); @@ -166,7 +188,7 @@ cmath_log2(mrb_state *mrb, mrb_value self) { mrb_float real, imag; if (cmath_get_complex(mrb, z, &real, &imag) || real < 0.0) { mrb_complex c = CX(real,imag); - c = CXDIVf(F(clog)(c),log(2)); + c = CXDIVf(FC(log)(c),log(2.0)); return mrb_complex_new(mrb, creal(c), cimag(c)); } return mrb_float_value(mrb, F(log2)(real)); @@ -179,7 +201,7 @@ cmath_sqrt(mrb_state *mrb, mrb_value self) { mrb_float real, imag; if (cmath_get_complex(mrb, z, &real, &imag) || real < 0.0) { mrb_complex c = CX(real,imag); - c = F(csqrt)(c); + c = FC(sqrt)(c); return mrb_complex_new(mrb, creal(c), cimag(c)); } return mrb_float_value(mrb, F(sqrt)(real)); |
