fix incorrect results in `expm1(::Union{Float16, Float32})` (#50989)
`unsafe_trunc(UInt, -1.0)` is unspecified behavior but worked fine on
apple and AMD so we didn't notice??? This has been very broken since 1.7.
(cherry picked from commit 61ebaf6643c57cef8b3bb4013b75931608ac6344)