math: Fix `NaN^n` for large `n` and the sign of `(-0.0)^n`
For exponents too large for power by squaring, `^(::Float64, ::Integer)`
called `pow_body(x, ::Float64)` without the non-finite handling that
`^(::Float64, ::Float64)` does first, so `NaN^(2^15)` returned `Inf` (and `0.0`
for negative exponents). Separately, compensated power by squaring added its
error term to the product, which turns a zero product's sign positive, so
`(-0.0)^5` was `0.0`; the product is now returned unchanged when the error
term is zero.
Assisted-by: Claude Code (Opus 5.5)