test_power.py (mpmath-0.18) | : | test_power.py (mpmath-0.19) | ||
---|---|---|---|---|

skipping to change at line 39 | skipping to change at line 39 | |||

ab = a**b | ab = a**b | |||

# note: could actually be exact, but that's very unlikely! | # note: could actually be exact, but that's very unlikely! | |||

assert to_int(mpf_pow(from_int(a), from_int(b), prec, round_down)) < ab | assert to_int(mpf_pow(from_int(a), from_int(b), prec, round_down)) < ab | |||

assert to_int(mpf_pow(from_int(a), from_int(b), prec, round_up)) > a b | assert to_int(mpf_pow(from_int(a), from_int(b), prec, round_up)) > a b | |||

def test_pow_epsilon_rounding(): | def test_pow_epsilon_rounding(): | |||

""" | """ | |||

Stress test directed rounding for powers with integer exponents. | Stress test directed rounding for powers with integer exponents. | |||

Basically, we look at the following cases: | Basically, we look at the following cases: | |||

>>> 1.0001 ** -5 | >>> 1.0001 ** -5 # doctest: +SKIP | |||

0.99950014996500702 | 0.99950014996500702 | |||

>>> 0.9999 ** -5 | >>> 0.9999 ** -5 # doctest: +SKIP | |||

1.000500150035007 | 1.000500150035007 | |||

>>> (-1.0001) ** -5 | >>> (-1.0001) ** -5 # doctest: +SKIP | |||

-0.99950014996500702 | -0.99950014996500702 | |||

>>> (-0.9999) ** -5 | >>> (-0.9999) ** -5 # doctest: +SKIP | |||

-1.000500150035007 | -1.000500150035007 | |||

>>> 1.0001 ** -6 | >>> 1.0001 ** -6 # doctest: +SKIP | |||

0.99940020994401269 | 0.99940020994401269 | |||

>>> 0.9999 ** -6 | >>> 0.9999 ** -6 # doctest: +SKIP | |||

1.0006002100560125 | 1.0006002100560125 | |||

>>> (-1.0001) ** -6 | >>> (-1.0001) ** -6 # doctest: +SKIP | |||

0.99940020994401269 | 0.99940020994401269 | |||

>>> (-0.9999) ** -6 | >>> (-0.9999) ** -6 # doctest: +SKIP | |||

1.0006002100560125 | 1.0006002100560125 | |||

etc. | etc. | |||

We run the tests with values a very small epsilon away from 1: | We run the tests with values a very small epsilon away from 1: | |||

small enough that the result is indistinguishable from 1 when | small enough that the result is indistinguishable from 1 when | |||

rounded to nearest at the output precision. We check that the | rounded to nearest at the output precision. We check that the | |||

result is not erroneously rounded to 1 in cases where the | result is not erroneously rounded to 1 in cases where the | |||

rounding should be done strictly away from 1. | rounding should be done strictly away from 1. | |||

""" | """ | |||

End of changes. 8 change blocks. | ||||

8 lines changed or deleted | | 8 lines changed or added |