From 14156559e372c806ccd491b0318eea2256229f27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kochma=C5=84ski?= Date: Mon, 8 Apr 2019 09:44:03 +0200 Subject: [PATCH] complex-float: implement minus operation --- src/c/numbers/minus.d | 74 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/c/numbers/minus.d b/src/c/numbers/minus.d index 17463f782..cf8f8dd2b 100644 --- a/src/c/numbers/minus.d +++ b/src/c/numbers/minus.d @@ -167,6 +167,80 @@ ecl_minus(cl_object x, cl_object y) cl_object z1 = ecl_minus(x->gencomplex.imag, y->gencomplex.imag); return ecl_make_complex(z, z1); } +#ifdef ECL_COMPLEX_FLOAT + /* upgraded type csfloat */ + CASE_CSFLOAT_FIXNUM; + CASE_CSFLOAT_BIGNUM; + CASE_CSFLOAT_RATIO; + CASE_CSFLOAT_SINGLE_FLOAT; + CASE_CSFLOAT_COMPLEX; + + CASE_FIXNUM_CSFLOAT; + CASE_BIGNUM_CSFLOAT; + CASE_RATIO_CSFLOAT; + CASE_SINGLE_FLOAT_CSFLOAT; + CASE_COMPLEX_CSFLOAT; + CASE_CSFLOAT_CSFLOAT { + cl_object aux = ecl_alloc_object(t_csfloat); + ecl_csfloat(aux) = ecl_to_csfloat(x) - ecl_to_csfloat(y); + return aux; + } + /* upgraded type cdfloat */ + CASE_CSFLOAT_DOUBLE_FLOAT; + CASE_DOUBLE_FLOAT_CSFLOAT; + + CASE_CDFLOAT_FIXNUM; + CASE_CDFLOAT_BIGNUM; + CASE_CDFLOAT_RATIO; + CASE_CDFLOAT_SINGLE_FLOAT; + CASE_CDFLOAT_DOUBLE_FLOAT; + CASE_CDFLOAT_COMPLEX; + CASE_CDFLOAT_CSFLOAT; + + CASE_FIXNUM_CDFLOAT; + CASE_BIGNUM_CDFLOAT; + CASE_RATIO_CDFLOAT; + CASE_SINGLE_FLOAT_CDFLOAT; + CASE_DOUBLE_FLOAT_CDFLOAT; + CASE_COMPLEX_CDFLOAT; + CASE_CSFLOAT_CDFLOAT; + CASE_CDFLOAT_CDFLOAT { + cl_object aux = ecl_alloc_object(t_cdfloat); + ecl_cdfloat(aux) = ecl_to_cdfloat(x) - ecl_to_cdfloat(y); + return aux; + } + /* upgraded type clfloat */ + CASE_CSFLOAT_LONG_FLOAT; + CASE_LONG_FLOAT_CSFLOAT; + CASE_CDFLOAT_LONG_FLOAT; + CASE_LONG_FLOAT_CDFLOAT; + + CASE_CLFLOAT_FIXNUM; + CASE_CLFLOAT_BIGNUM; + CASE_CLFLOAT_RATIO; + CASE_CLFLOAT_SINGLE_FLOAT; + CASE_CLFLOAT_DOUBLE_FLOAT; + CASE_CLFLOAT_LONG_FLOAT; + CASE_CLFLOAT_COMPLEX; + CASE_CLFLOAT_CSFLOAT; + CASE_CLFLOAT_CDFLOAT; + + CASE_FIXNUM_CLFLOAT; + CASE_BIGNUM_CLFLOAT; + CASE_RATIO_CLFLOAT; + CASE_SINGLE_FLOAT_CLFLOAT; + CASE_DOUBLE_FLOAT_CLFLOAT; + CASE_LONG_FLOAT_CLFLOAT; + CASE_COMPLEX_CLFLOAT; + CASE_CSFLOAT_CLFLOAT; + CASE_CDFLOAT_CLFLOAT; + CASE_CLFLOAT_CLFLOAT + { + cl_object aux = ecl_alloc_object(t_clfloat); + ecl_clfloat(aux) = ecl_to_clfloat(x) - ecl_to_clfloat(y); + return aux; + } +#endif CASE_UNKNOWN(@[-],x,y,@[number]); } MATH_DISPATCH2_END;