summaryrefslogtreecommitdiff
path: root/Build/source/libs/mpfr/mpfr-src/src/si_op.c
diff options
context:
space:
mode:
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.c123
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;
}