diff options
Diffstat (limited to 'Build/source/libs/mpfr/mpfr-src/src/si_op.c')
-rw-r--r-- | Build/source/libs/mpfr/mpfr-src/src/si_op.c | 123 |
1 files changed, 113 insertions, 10 deletions
diff --git a/Build/source/libs/mpfr/mpfr-src/src/si_op.c b/Build/source/libs/mpfr/mpfr-src/src/si_op.c index 5b7a72f38fd..a65799fefa0 100644 --- a/Build/source/libs/mpfr/mpfr-src/src/si_op.c +++ b/Build/source/libs/mpfr/mpfr-src/src/si_op.c @@ -1,6 +1,9 @@ /* mpfr_add_si -- add a floating-point number with a machine integer - mpfr_sub_si -- sub a floating-point number with a machine integer - mpfr_si_sub -- sub a machine number with a floating-point number + mpfr_sub_si -- sub a floating-point number with a machine integer + mpfr_si_sub -- sub a machine number with a floating-point number + mpfr_mul_si -- multiply a floating-point number by a machine integer + mpfr_div_si -- divide a floating-point number by a machine integer + mpfr_si_div -- divide a machine number by a floating-point number Copyright 2004-2017 Free Software Foundation, Inc. Contributed by the AriC and Caramba projects, INRIA. @@ -27,31 +30,131 @@ http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc., int mpfr_add_si (mpfr_ptr y, mpfr_srcptr x, long int u, mpfr_rnd_t rnd_mode) { + int res; + + MPFR_LOG_FUNC + (("x[%Pu]=%.*Rg u=%ld rnd=%d", + mpfr_get_prec(x), mpfr_log_prec, x, u, rnd_mode), + ("y[%Pu]=%.*Rg inexact=%d", + mpfr_get_prec(y), mpfr_log_prec, y, res)); + if (u >= 0) - return mpfr_add_ui (y, x, u, rnd_mode); + res = mpfr_add_ui (y, x, u, rnd_mode); else - return mpfr_sub_ui (y, x, - (unsigned long) u, rnd_mode); + res = mpfr_sub_ui (y, x, - (unsigned long) u, rnd_mode); + + return res; } int mpfr_sub_si (mpfr_ptr y, mpfr_srcptr x, long int u, mpfr_rnd_t rnd_mode) { + int res; + + MPFR_LOG_FUNC + (("x[%Pu]=%.*Rg u=%ld rnd=%d", + mpfr_get_prec(x), mpfr_log_prec, x, u, rnd_mode), + ("y[%Pu]=%.*Rg inexact=%d", + mpfr_get_prec(y), mpfr_log_prec, y, res)); + if (u >= 0) - return mpfr_sub_ui (y, x, u, rnd_mode); + res = mpfr_sub_ui (y, x, u, rnd_mode); else - return mpfr_add_ui (y, x, - (unsigned long) u, rnd_mode); + res = mpfr_add_ui (y, x, - (unsigned long) u, rnd_mode); + + return res; } int mpfr_si_sub (mpfr_ptr y, long int u, mpfr_srcptr x, mpfr_rnd_t rnd_mode) { + int res; + + MPFR_LOG_FUNC + (("x[%Pu]=%.*Rg u=%ld rnd=%d", + mpfr_get_prec(x), mpfr_log_prec, x, u, rnd_mode), + ("y[%Pu]=%.*Rg inexact=%d", + mpfr_get_prec(y), mpfr_log_prec, y, res)); + if (u >= 0) - return mpfr_ui_sub (y, u, x, rnd_mode); + res = mpfr_ui_sub (y, u, x, rnd_mode); else { - int res = - mpfr_add_ui (y, x, - (unsigned long) u, - MPFR_INVERT_RND (rnd_mode)); + res = - mpfr_add_ui (y, x, - (unsigned long) u, + MPFR_INVERT_RND (rnd_mode)); MPFR_CHANGE_SIGN (y); - return res; } + + return res; +} + +#undef mpfr_mul_si +int +mpfr_mul_si (mpfr_ptr y, mpfr_srcptr x, long int u, mpfr_rnd_t rnd_mode) +{ + int res; + + MPFR_LOG_FUNC + (("x[%Pu]=%.*Rg u=%ld rnd=%d", + mpfr_get_prec(x), mpfr_log_prec, x, u, rnd_mode), + ("y[%Pu]=%.*Rg inexact=%d", + mpfr_get_prec(y), mpfr_log_prec, y, res)); + + if (u >= 0) + res = mpfr_mul_ui (y, x, u, rnd_mode); + else + { + res = - mpfr_mul_ui (y, x, - (unsigned long) u, + MPFR_INVERT_RND (rnd_mode)); + MPFR_CHANGE_SIGN (y); + } + + return res; +} + +#undef mpfr_div_si +int +mpfr_div_si (mpfr_ptr y, mpfr_srcptr x, long int u, mpfr_rnd_t rnd_mode) +{ + int res; + + MPFR_LOG_FUNC + (("x[%Pu]=%.*Rg u=%ld rnd=%d", + mpfr_get_prec(x), mpfr_log_prec, x, u, rnd_mode), + ("y[%Pu]=%.*Rg inexact=%d", + mpfr_get_prec(y), mpfr_log_prec, y, res)); + + if (u >= 0) + res = mpfr_div_ui (y, x, u, rnd_mode); + else + { + res = - mpfr_div_ui (y, x, - (unsigned long) u, + MPFR_INVERT_RND (rnd_mode)); + MPFR_CHANGE_SIGN (y); + } + + return res; +} + +int +mpfr_si_div (mpfr_ptr y, long int u, mpfr_srcptr x, mpfr_rnd_t rnd_mode) +{ + int res; + + MPFR_LOG_FUNC + (("x[%Pu]=%.*Rg u=%ld rnd=%d", + mpfr_get_prec(x), mpfr_log_prec, x, u, rnd_mode), + ("y[%Pu]=%.*Rg inexact=%d", + mpfr_get_prec(y), mpfr_log_prec, y, res)); + + if (u >= 0) + res = mpfr_ui_div (y, u, x, rnd_mode); + else + { + res = - mpfr_ui_div (y, - (unsigned long) u, x, + MPFR_INVERT_RND(rnd_mode)); + MPFR_CHANGE_SIGN (y); + } + + return res; } |