diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2013-08-23 02:41:24 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2013-08-23 02:41:24 +0000 |
commit | a80a670c8a7341ea3185f55e0821d9a4ecc7540f (patch) | |
tree | 705f80be581ffd91a7f222eb91d0a9472077a754 /tests/tagm.c | |
parent | 355cac084eb0ba3c906f76cd0b4d822228b1c270 (diff) | |
download | mpfr-a80a670c8a7341ea3185f55e0821d9a4ecc7540f.tar.gz |
[src/agm.c] Corrected a comment.
[tests/tagm.c] Added tests concerning special values,
in particular (zero,negative) and symmetric tests.
[doc/mpfr.texi] Corrected mpfr_agm description.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@8666 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/tagm.c')
-rw-r--r-- | tests/tagm.c | 72 |
1 files changed, 66 insertions, 6 deletions
diff --git a/tests/tagm.c b/tests/tagm.c index fc0d499a8..93c91eda7 100644 --- a/tests/tagm.c +++ b/tests/tagm.c @@ -166,7 +166,7 @@ check_large (void) } static void -check_nans (void) +check_special (void) { mpfr_t x, y, m; @@ -174,11 +174,13 @@ check_nans (void) mpfr_init2 (y, 123L); mpfr_init2 (m, 123L); - /* agm(1,nan) == nan */ + /* agm(1,nan) is NaN */ mpfr_set_ui (x, 1L, MPFR_RNDN); mpfr_set_nan (y); mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (mpfr_nan_p (m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); /* agm(1,+inf) == +inf */ mpfr_set_ui (x, 1L, MPFR_RNDN); @@ -186,6 +188,9 @@ check_nans (void) mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (mpfr_inf_p (m)); MPFR_ASSERTN (mpfr_sgn (m) > 0); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (mpfr_inf_p (m)); + MPFR_ASSERTN (mpfr_sgn (m) > 0); /* agm(+inf,+inf) == +inf */ mpfr_set_inf (x, 1); @@ -194,23 +199,55 @@ check_nans (void) MPFR_ASSERTN (mpfr_inf_p (m)); MPFR_ASSERTN (mpfr_sgn (m) > 0); - /* agm(-inf,+inf) == nan */ + /* agm(-inf,+inf) is NaN */ mpfr_set_inf (x, -1); mpfr_set_inf (y, 1); mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (mpfr_nan_p (m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); - /* agm(+0,+inf) == nan */ + /* agm(+0,+inf) is NaN */ mpfr_set_ui (x, 0, MPFR_RNDN); mpfr_set_inf (y, 1); mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (mpfr_nan_p (m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); + + /* agm(-0,+inf) is NaN */ + mpfr_set_ui (x, 0, MPFR_RNDN); + mpfr_neg (x, x, MPFR_RNDN); + mpfr_set_inf (y, 1); + mpfr_agm (m, x, y, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); + + /* agm(+0,-inf) is NaN */ + mpfr_set_ui (x, 0, MPFR_RNDN); + mpfr_set_inf (y, -1); + mpfr_agm (m, x, y, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); + + /* agm(-0,-inf) is NaN */ + mpfr_set_ui (x, 0, MPFR_RNDN); + mpfr_neg (x, x, MPFR_RNDN); + mpfr_set_inf (y, -1); + mpfr_agm (m, x, y, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); /* agm(+0,1) == +0 */ mpfr_set_ui (x, 0, MPFR_RNDN); mpfr_set_ui (y, 1, MPFR_RNDN); mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); /* agm(-0,1) == +0 */ mpfr_set_ui (x, 0, MPFR_RNDN); @@ -218,6 +255,25 @@ check_nans (void) mpfr_set_ui (y, 1, MPFR_RNDN); mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); + + /* agm(+0,-1) == +0 */ + mpfr_set_ui (x, 0, MPFR_RNDN); + mpfr_set_si (y, -1, MPFR_RNDN); + mpfr_agm (m, x, y, MPFR_RNDN); + MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); + + /* agm(-0,-1) == +0 */ + mpfr_set_ui (x, 0, MPFR_RNDN); + mpfr_neg (x, x, MPFR_RNDN); + mpfr_set_si (y, -1, MPFR_RNDN); + mpfr_agm (m, x, y, MPFR_RNDN); + MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); /* agm(-0,+0) == +0 */ mpfr_set_ui (x, 0, MPFR_RNDN); @@ -225,6 +281,8 @@ check_nans (void) mpfr_set_ui (y, 0, MPFR_RNDN); mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m)); /* agm(1,1) == 1 */ mpfr_set_ui (x, 1, MPFR_RNDN); @@ -232,11 +290,13 @@ check_nans (void) mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (mpfr_cmp_ui (m ,1) == 0); - /* agm(-1,-2) == NaN */ + /* agm(-1,-2) is NaN */ mpfr_set_si (x, -1, MPFR_RNDN); mpfr_set_si (y, -2, MPFR_RNDN); mpfr_agm (m, x, y, MPFR_RNDN); MPFR_ASSERTN (mpfr_nan_p (m)); + mpfr_agm (m, y, x, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nan_p (m)); mpfr_clear (x); mpfr_clear (y); @@ -254,7 +314,7 @@ main (int argc, char* argv[]) { tests_start_mpfr (); - check_nans (); + check_special (); check_large (); check4 ("2.0", "1.0", MPFR_RNDN, "1.456791031046906869", -1); |