In earlier releases, `Real.pow(Self, Int)`

simply called through to `libm_pow`

. This is generally acceptable on platforms with a decent math library, but gets some cases wrong for `Float`

and `Double`

when the exponent is so large that it would be rounded in conversion to `Self`

.

For example, consider `Float.pow(-1, 0x1000001)`

. Since the exponent is odd, the result should be `-1`

, but when we simply called `libm_pow(-1, Float(0x1000001))`

, the exponent was rounded to an even number, and the result was `1`

.

This behavior is fixed in this release; in particular the parity of integer exponents is always preserved, so that we will not have sign errors like above. There is still additional work to be done on the `Real.pow`

implementations--especially to provide better support for platforms with suspect math libraries--but this is a significant improvement to these operations.

I've also added a basic set of test cases to stress these extreme exponents with `x`

close to 1.0; these are the cases for `pow`

requiring the most internal precision, so they also provide key coverage for future implementation of these operations within Swift-Numerics itself.