Contributors: @cuviper, @michaelciraci
Euclid::div_rem_euclid
and CheckedEuclid::checked_div_rem_euclid
methods compute and return the quotient and remainder at the same time.TotalOrder
trait implements the IEEE 754 totalOrder
predicate.ConstZero
and ConstOne
traits offered associated constants, extending the non-const Zero
and One
traits for types that have constant values.Contributors: @andrewjradcliffe, @cuviper, @tarcieri, @tdelabro, @waywardmonkeys
Contributors: @robamu
ToBytes
and FromBytes
traits convert to and from byte representations of a value, with little, big, and native-endian options.Float::is_subnormal
method checks for subnormal values, with a non-zero magnitude that is less than the normal minimum positive value.Contributors: @ctrlcctrlv, @cuviper, @flier, @GuillaumeGomez, @kaidokert, @rs017991, @vicsn
Euclid
trait calculates Euclidean division, where the remainder is always positive or zero.LowerBounded
and UpperBounded
traits separately describe types with lower and upper bounds. These traits are automatically implemented for all fully-Bounded
types.Float::copysign
method copies the sign of the argument to to the magnitude of self
.PrimInt::leading_ones
and trailing_ones
methods are the complement of the existing methods that count zero bits.PrimInt::reverse_bits
method reverses the order of all bits of a primitive integer.Num::from_str_radix
for floats, also ignoring case.Float
and FloatCore
use more from libm
when that is enabled.Contributors: @alion02, @clarfonthey, @cuviper, @ElectronicRU, @ibraheemdev, @SparrowLii, @sshilovsky, @tspiteri, @XAMPPRocky, @Xiretza
Contributors: @cuviper
OverflowingAdd
, OverflowingSub
, and OverflowingMul
traits return a tuple with the operation result and a bool
indicating overflow.autocfg
probing doesn't work properly.f64
values to f32
now saturate to infinity. They previously returned None
because that was once thought to be undefined behavior, but rust#15536 resolved that such casts are fine.Num::from_str_radix
documents requirements for radix support, which are now more relaxed than previously implied. It is suggested to accept at least 2..=36
without panicking, but Err
may be returned otherwise.Contributors: @cuviper, @Enet4, @KaczuH, @martin-t, @newpavlov
WrappingNeg
trait will wrap the result if it exceeds the boundary of the type, e.g. i32::MIN.wrapping_neg() == i32::MIN
.SaturatingAdd
, SaturatingSub
, and SaturatingMul
traits will saturate at the numeric bounds if the operation would overflow. These soft-deprecate the existing Saturating
trait that only has addition and subtraction methods.FloatConst::{LOG10_2, LOG2_10}
.Contributors: @cuviper, @ocstl, @trepetti, @vallentin
Contributors: @cuviper, @m-ou-se
Contributors: @CryZe
libm
dependency enables the Float
and Real
traits in no_std
builds.clamp_min
and clamp_max
limit minimum and maximum values while preserving input NAN
s.from_str_radix
on invalid signs.Contributors: @cuviper, @dingelish, @HeroicKatora, @jturner314, @ocstl, @Shnatsel, @termoshtt, @waywardmonkeys, @yoanlcq
Contributors: @cuviper
CheckedShl
and CheckedShr
return None
.Zero::set_zero
and One::set_one
will set values to their identities in place, possibly optimized better than direct assignment.PrimInt
.Contributors: @cuviper, @dvdhrm, @ignatenkobrain, @lcnr, @samueltardieu
pow(0, 0)
returns 1
. Mathematically, this is not strictly defined, but the current behavior is a pragmatic choice that has precedent in Rust core
for the primitives and in many other languages.WrappingShl
and WrappingShr
traits will wrap the shift count if it exceeds the bit size of the type.Contributors: @cuviper, @edmccard, @meltinglava
mul_add
now clarifies that it's not always faster.FromPrimitive
and ToPrimitive
are more robust.Contributors: @cuviper, @frewsxcv
i128
crate feature now causes the build script to panic if such support is not detected.Contributors: @cuviper
CheckedNeg
and CheckedRem
traits perform checked Neg
and Rem
, returning Some(output)
or None
on overflow.no_std
implementation of FloatCore::to_degrees
for f32
now uses a constant for greater accuracy, mirroring rust#47919. (With std
it just calls the inherent f32::to_degrees
in the standard library.)MulAdd
and MulAddAssign
traits perform a fused multiply- add. For integer types this is just a convenience, but for floating point types this produces a more accurate result than the separate operations.i128
crate feature. The FromPrimitive
and ToPrimitive
traits now also have corresponding 128-bit methods, which default to converting via 64-bit integers for compatibility.Contributors: @cuviper, @LEXUGE, @regexident, @vks
None
on overflow, avoiding rustc's undefined behavior. This applies to the cast
function and the traits NumCast
, FromPrimitive
, and ToPrimitive
.Contributors: @apopiak, @cuviper, @dbarella
FloatCore
trait offers a subset of Float
for #![no_std]
use. This includes everything except the transcendental functions and FMA.Inv
trait returns the multiplicative inverse, or reciprocal.Pow
trait performs exponentiation, much like the existing pow
function, but with generic exponent types.One::is_one
method tests if a value equals 1. Implementers should override this method if there's a more efficient way to check for 1, rather than comparing with a temporary one()
.Contributors: @clarcharr, @cuviper, @vks
std
feature, enabled by default, along with the implication that building without this feature makes this a #![no_std]
crate.Float
and Real
traits are only available when std
is enabled.Contributors: @cuviper, @termoshtt, @vks
ParseFloatError
now implements Display
.AsPrimitive
trait implements generic casting with the as
operator.CheckedShl
and CheckedShr
traits implement generic support for the checked_shl
and checked_shr
methods on primitive integers.Real
trait offers a subset of Float
functionality that may be applicable to more types, with a blanket implementation for all existing T: Float
types.Thanks to @cuviper, @Enet4, @fabianschuiki, @svartalf, and @yoanlcq for their contributions!
No prior release notes were kept. Thanks all the same to the many contributors that have made this crate what it is!