Struct fixed::Wrapping [−][src]
#[repr(transparent)]pub struct Wrapping<F>(pub F);
Expand description
Provides intentionally wrapped arithmetic on fixed-point numbers.
The underlying value can be retrieved through the .0
index.
Examples
use fixed::{types::I16F16, Wrapping};
let max = Wrapping(I16F16::MAX);
let delta = Wrapping(I16F16::DELTA);
assert_eq!(I16F16::MIN, (max + delta).0);
Tuple Fields
0: F
Implementations
The number of fractional bits.
See also FixedI32::FRAC_NBITS
and
FixedU32::FRAC_NBITS
.
Examples
use fixed::{types::I16F16, Wrapping};
assert_eq!(Wrapping::<I16F16>::FRAC_NBITS, I16F16::FRAC_NBITS);
Converts a fixed-point number from big endian to the target’s endianness.
See also FixedI32::from_be
and
FixedU32::from_be
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x1234_5678));
if cfg!(target_endian = "big") {
assert_eq!(Wrapping::from_be(w), w);
} else {
assert_eq!(Wrapping::from_be(w), w.swap_bytes());
}
Converts a fixed-point number from little endian to the target’s endianness.
See also FixedI32::from_le
and
FixedU32::from_le
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x1234_5678));
if cfg!(target_endian = "little") {
assert_eq!(Wrapping::from_le(w), w);
} else {
assert_eq!(Wrapping::from_le(w), w.swap_bytes());
}
Converts self
to big endian from the target’s endianness.
See also FixedI32::to_be
and
FixedU32::to_be
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x1234_5678));
if cfg!(target_endian = "big") {
assert_eq!(w.to_be(), w);
} else {
assert_eq!(w.to_be(), w.swap_bytes());
}
Converts self
to little endian from the target’s endianness.
See also FixedI32::to_le
and
FixedU32::to_le
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x1234_5678));
if cfg!(target_endian = "little") {
assert_eq!(w.to_le(), w);
} else {
assert_eq!(w.to_le(), w.swap_bytes());
}
Reverses the byte order of the fixed-point number.
See also FixedI32::swap_bytes
and
FixedU32::swap_bytes
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x1234_5678));
let swapped = Wrapping(I16F16::from_bits(0x7856_3412));
assert_eq!(w.swap_bytes(), swapped);
Creates a fixed-point number from its representation as a byte array in big endian.
See also
FixedI32::from_be_bytes
and
FixedU32::from_be_bytes
.
Examples
use fixed::{types::I16F16, Wrapping};
let bytes = [0x12, 0x34, 0x56, 0x78];
assert_eq!(
Wrapping::<I16F16>::from_be_bytes(bytes),
Wrapping::<I16F16>::from_bits(0x1234_5678)
);
Creates a fixed-point number from its representation as a byte array in little endian.
See also
FixedI32::from_le_bytes
and
FixedU32::from_le_bytes
.
Examples
use fixed::{types::I16F16, Wrapping};
let bytes = [0x78, 0x56, 0x34, 0x12];
assert_eq!(
Wrapping::<I16F16>::from_le_bytes(bytes),
Wrapping::<I16F16>::from_bits(0x1234_5678)
);
Creates a fixed-point number from its representation as a byte array in native endian.
See also
FixedI32::from_ne_bytes
and
FixedU32::from_ne_bytes
.
Examples
use fixed::{types::I16F16, Wrapping};
let bytes = if cfg!(target_endian = "big") {
[0x12, 0x34, 0x56, 0x78]
} else {
[0x78, 0x56, 0x34, 0x12]
};
assert_eq!(
Wrapping::<I16F16>::from_ne_bytes(bytes),
Wrapping::<I16F16>::from_bits(0x1234_5678)
);
Returns the memory representation of this fixed-point number as a byte array in big-endian byte order.
See also FixedI32::to_be_bytes
and FixedU32::to_be_bytes
.
Examples
use fixed::{types::I16F16, Wrapping};
assert_eq!(
Wrapping::<I16F16>::from_bits(0x1234_5678).to_be_bytes(),
[0x12, 0x34, 0x56, 0x78]
);
Returns the memory representation of this fixed-point number as a byte array in little-endian byte order.
See also FixedI32::to_le_bytes
and FixedU32::to_le_bytes
.
Examples
use fixed::{types::I16F16, Wrapping};
assert_eq!(
Wrapping::<I16F16>::from_bits(0x1234_5678).to_le_bytes(),
[0x78, 0x56, 0x34, 0x12]
);
Returns the memory representation of this fixed-point number as a byte array in native-endian byte order.
See also FixedI32::to_ne_bytes
and FixedU32::to_ne_bytes
.
Examples
use fixed::{types::I16F16, Wrapping};
let bytes = if cfg!(target_endian = "big") {
[0x12, 0x34, 0x56, 0x78]
} else {
[0x78, 0x56, 0x34, 0x12]
};
assert_eq!(
Wrapping::<I16F16>::from_bits(0x1234_5678).to_ne_bytes(),
bytes
);
Wrapping conversion from another number.
The other number can be:
- A fixed-point number. Any extra fractional bits are discarded, which rounds towards −∞.
- An integer of type
i8
,i16
,i32
,i64
,i128
,isize
,u8
,u16
,u32
,u64
,u128
, orusize
. - A floating-point number of type
f16
,bf16
,f32
,f64
orF128Bits
. For this conversion, the method rounds to the nearest, with ties rounding to even. - Any other number
src
for whichToFixed
is implemented, in which case this method returnsWrapping(src.wrapping_to_fixed())
.
See also
FixedI32::wrapping_from_num
and
FixedU32::wrapping_from_num
.
Panics
For floating-point numbers, panics if the value is not finite.
Examples
use fixed::{
types::{I4F4, I16F16},
Wrapping,
};
// 0x1234.5678 wraps into 0x4.5
let src = I16F16::from_bits(0x1234_5678);
let dst = Wrapping::<I4F4>::from_num(src);
assert_eq!(dst, Wrapping(I4F4::from_bits(0x45)));
// 0x1234 wraps into 0x4.0
let src_int = 0x1234_i32;
let dst_int = Wrapping::<I4F4>::from_num(src_int);
assert_eq!(dst_int, Wrapping(I4F4::from_bits(0x40)));
// 129.75 wrapped into 1.75 (binary 1.1100)
let src_float = 129.75;
let dst_float = Wrapping::<I4F4>::from_num(src_float);
assert_eq!(dst_float, Wrapping(I4F4::from_bits(0b11100)));
Converts a fixed-point number to another number, wrapping the value on overflow.
The other number can be:
- Another fixed-point number. Any extra fractional bits are discarded, which rounds towards −∞.
- An integer of type
i8
,i16
,i32
,i64
,i128
,isize
,u8
,u16
,u32
,u64
,u128
, orusize
. Any fractional bits are discarded, which rounds towards −∞. - A floating-point number of type
f16
,bf16
,f32
,f64
orF128Bits
. For this conversion, the method rounds to the nearest, with ties rounding to even. - Any other type
Dst
for whichFromFixed
is implemented, in which case this method returnsDst::wrapping_from_fixed(self.0)
.
See also FixedI32::wrapping_to_num
and
FixedU32::wrapping_to_num
.
Examples
use fixed::{
types::{I16F16, I2F6, I4F4},
Wrapping,
};
// conversion that fits
let src = Wrapping(I4F4::from_num(1.75));
let expected = I16F16::from_num(1.75);
assert_eq!(src.to_num::<I16F16>(), expected);
// conversion that wraps
let src = Wrapping(I4F4::MAX);
let wrapped = I2F6::from_bits(I2F6::MAX.to_bits() << 2);
assert_eq!(src.to_num::<I2F6>(), wrapped);
Parses a string slice containing binary digits to return a fixed-point number.
Rounding is to the nearest, with ties rounded to even.
See also
FixedI32::wrapping_from_str_binary
and
FixedU32::wrapping_from_str_binary
.
Examples
use fixed::{types::I8F8, Wrapping};
let check = Wrapping(I8F8::from_bits(0b1110001 << (8 - 1)));
assert_eq!(Wrapping::<I8F8>::from_str_binary("101100111000.1"), Ok(check));
Parses a string slice containing octal digits to return a fixed-point number.
Rounding is to the nearest, with ties rounded to even.
See also
FixedI32::wrapping_from_str_octal
and
FixedU32::wrapping_from_str_octal
.
Examples
use fixed::{types::I8F8, Wrapping};
let check = Wrapping(I8F8::from_bits(0o1654 << (8 - 3)));
assert_eq!(Wrapping::<I8F8>::from_str_octal("7165.4"), Ok(check));
Parses a string slice containing hexadecimal digits to return a fixed-point number.
Rounding is to the nearest, with ties rounded to even.
See also
FixedI32::wrapping_from_str_hex
and
FixedU32::wrapping_from_str_hex
.
Examples
use fixed::{types::I8F8, Wrapping};
let check = Wrapping(I8F8::from_bits(0xFFE));
assert_eq!(Wrapping::<I8F8>::from_str_hex("C0F.FE"), Ok(check));
Returns the integer part.
Note that since the numbers are stored in two’s complement,
negative numbers with non-zero fractional parts will be
rounded towards −∞, except in the case where there are no
integer bits, for example for the type
Wrapping<I0F16>
, where the return value
is always zero.
See also FixedI32::int
and
FixedU32::int
.
Examples
use fixed::{types::I16F16, Wrapping};
assert_eq!(Wrapping(I16F16::from_num(12.25)).int(), Wrapping(I16F16::from_num(12)));
assert_eq!(Wrapping(I16F16::from_num(-12.25)).int(), Wrapping(I16F16::from_num(-13)));
Returns the fractional part.
Note that since the numbers are stored in two’s complement,
the returned fraction will be non-negative for negative
numbers, except in the case where there are no integer bits,
for example for the type
Wrapping<I0F16>
,
where the return value is always equal to self
.
See also FixedI32::frac
and
FixedU32::frac
.
Examples
use fixed::{types::I16F16, Wrapping};
assert_eq!(Wrapping(I16F16::from_num(12.25)).frac(), Wrapping(I16F16::from_num(0.25)));
assert_eq!(Wrapping(I16F16::from_num(-12.25)).frac(), Wrapping(I16F16::from_num(0.75)));
Rounds to the next integer towards 0.
See also
FixedI32::round_to_zero
and
FixedU32::round_to_zero
.
Examples
use fixed::{types::I16F16, Wrapping};
let three = Wrapping(I16F16::from_num(3));
assert_eq!(Wrapping(I16F16::from_num(3.9)).round_to_zero(), three);
assert_eq!(Wrapping(I16F16::from_num(-3.9)).round_to_zero(), -three);
Wrapping ceil. Rounds to the next integer towards +∞, wrapping on overflow.
See also
FixedI32::wrapping_ceil
and
FixedU32::wrapping_ceil
.
Examples
use fixed::{types::I16F16, Wrapping};
let two_half = Wrapping(I16F16::from_num(5) / 2);
assert_eq!(two_half.ceil(), Wrapping(I16F16::from_num(3)));
assert_eq!(Wrapping(I16F16::MAX).ceil(), Wrapping(I16F16::MIN));
Wrapping floor. Rounds to the next integer towards −∞, wrapping on overflow.
Overflow can only occur for signed numbers with zero integer bits.
See also
FixedI32::wrapping_floor
and
FixedU32::wrapping_floor
.
Examples
use fixed::{
types::{I0F32, I16F16},
Wrapping,
};
let two_half = Wrapping(I16F16::from_num(5) / 2);
assert_eq!(two_half.floor(), Wrapping(I16F16::from_num(2)));
assert_eq!(Wrapping(I0F32::MIN).floor(), Wrapping(I0F32::ZERO));
Wrapping round. Rounds to the next integer to the nearest, with ties rounded away from zero, and wrapping on overflow.
See also
FixedI32::wrapping_round
and
FixedU32::wrapping_round
.
Examples
use fixed::{types::I16F16, Wrapping};
let two_half = Wrapping(I16F16::from_num(5) / 2);
assert_eq!(two_half.round(), Wrapping(I16F16::from_num(3)));
assert_eq!((-two_half).round(), Wrapping(I16F16::from_num(-3)));
assert_eq!(Wrapping(I16F16::MAX).round(), Wrapping(I16F16::MIN));
Wrapping round. Rounds to the next integer to the nearest, with ties rounded to even, and wrapping on overflow.
See also
FixedI32::wrapping_round_ties_to_even
and
FixedU32::wrapping_round_ties_to_even
.
Examples
use fixed::{types::I16F16, Wrapping};
let two_half = Wrapping(I16F16::from_num(2.5));
assert_eq!(two_half.round_ties_to_even(), Wrapping(I16F16::from_num(2)));
let three_half = Wrapping(I16F16::from_num(3.5));
assert_eq!(three_half.round_ties_to_even(), Wrapping(I16F16::from_num(4)));
let max = Wrapping(I16F16::MAX);
assert_eq!(max.round_ties_to_even(), Wrapping(I16F16::MIN));
Returns the number of ones in the binary representation.
See also FixedI32::count_ones
and
FixedU32::count_ones
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x00FF_FF00));
assert_eq!(w.count_ones(), w.0.count_ones());
Returns the number of zeros in the binary representation.
See also FixedI32::count_zeros
and FixedU32::count_zeros
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x00FF_FF00));
assert_eq!(w.count_zeros(), w.0.count_zeros());
Returns the number of leading ones in the binary representation.
See also FixedI32::leading_ones
and FixedU32::leading_ones
.
Examples
use fixed::{types::U16F16, Wrapping};
let w = Wrapping(U16F16::from_bits(0xFF00_00FF));
assert_eq!(w.leading_ones(), w.0.leading_ones());
Returns the number of leading zeros in the binary representation.
See also
FixedI32::leading_zeros
and
FixedU32::leading_zeros
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x00FF_FF00));
assert_eq!(w.leading_zeros(), w.0.leading_zeros());
Returns the number of trailing ones in the binary representation.
See also
FixedI32::trailing_ones
and
FixedU32::trailing_ones
.
Examples
use fixed::{types::U16F16, Wrapping};
let w = Wrapping(U16F16::from_bits(0xFF00_00FF));
assert_eq!(w.trailing_ones(), w.0.trailing_ones());
Returns the number of trailing zeros in the binary representation.
See also
FixedI32::trailing_zeros
and
FixedU32::trailing_zeros
.
Examples
use fixed::{types::I16F16, Wrapping};
let w = Wrapping(I16F16::from_bits(0x00FF_FF00));
assert_eq!(w.trailing_zeros(), w.0.trailing_zeros());
Reverses the order of the bits of the fixed-point number.
See also FixedI32::reverse_bits
and FixedU32::reverse_bits
.
Examples
use fixed::{types::I16F16, Wrapping};
let i = I16F16::from_bits(0x1234_5678);
assert_eq!(Wrapping(i).reverse_bits(), Wrapping(i.reverse_bits()));
Shifts to the left by n
bits, wrapping the truncated bits to the right end.
See also FixedI32::rotate_left
and FixedU32::rotate_left
.
Examples
use fixed::{types::I16F16, Wrapping};
let i = I16F16::from_bits(0x00FF_FF00);
assert_eq!(Wrapping(i).rotate_left(12), Wrapping(i.rotate_left(12)));
Shifts to the right by n
bits, wrapping the truncated bits to the left end.
See also FixedI32::rotate_right
and FixedU32::rotate_right
.
Examples
use fixed::{types::I16F16, Wrapping};
let i = I16F16::from_bits(0x00FF_FF00);
assert_eq!(Wrapping(i).rotate_right(12), Wrapping(i.rotate_right(12)));
Returns the distance from self
to other
.
See also
FixedI32::wrapping_dist
and
FixedU32::wrapping_dist
.
Examples
use fixed::{types::I16F16, Wrapping};
type Wr = Wrapping<I16F16>;
assert_eq!(Wr::from_num(-1).dist(Wr::from_num(4)), Wr::from_num(5));
assert_eq!(Wr::MIN.dist(Wr::MAX), -Wr::DELTA);
Returns the mean of self
and other
.
See also FixedI32::mean
and
FixedU32::mean
.
Examples
use fixed::{types::I16F16, Wrapping};
let three = Wrapping(I16F16::from_num(3));
let four = Wrapping(I16F16::from_num(4));
assert_eq!(three.mean(four), Wrapping(I16F16::from_num(3.5)));
assert_eq!(three.mean(-four), Wrapping(I16F16::from_num(-0.5)));
Returns the reciprocal (inverse), 1/self
.
See also
FixedI32::wrapping_recip
and
FixedU32::wrapping_recip
.
Panics
Panics if self
is zero.
Examples
use fixed::{types::I8F24, Wrapping};
let quarter = Wrapping(I8F24::from_num(0.25));
let frac_1_512 = Wrapping(I8F24::ONE / 512);
assert_eq!(quarter.recip(), Wrapping(I8F24::from_num(4)));
assert_eq!(frac_1_512.recip(), Wrapping(I8F24::ZERO));
Multiply and add. Returns self
× mul
+ add
.
See also
FixedI32::wrapping_mul_add
and
FixedU32::wrapping_mul_add
.
Examples
use fixed::{types::I16F16, Wrapping};
let half = Wrapping(I16F16::from_num(0.5));
let three = Wrapping(I16F16::from_num(3));
let four = Wrapping(I16F16::from_num(4));
let max = Wrapping(I16F16::MAX);
assert_eq!(three.mul_add(half, four), Wrapping(I16F16::from_num(5.5)));
assert_eq!(max.mul_add(three, max), Wrapping(I16F16::from_bits(!0 << 2)));
Multiply and accumulate. Adds (a
× b
) to self
.
See also
FixedI32::wrapping_mul_acc
and
FixedU32::wrapping_mul_acc
.
Examples
use fixed::{types::I16F16, Wrapping};
let mut acc = Wrapping(I16F16::from_num(3));
acc.mul_acc(Wrapping(I16F16::from_num(4)), Wrapping(I16F16::from_num(0.5)));
assert_eq!(acc, Wrapping(I16F16::from_num(5)));
acc = Wrapping(I16F16::MAX);
acc.mul_acc(Wrapping(I16F16::MAX), Wrapping(I16F16::from_num(3)));
assert_eq!(acc, Wrapping(I16F16::MAX) * 4);
Euclidean division.
See also
FixedI32::wrapping_div_euclid
and
FixedU32::wrapping_div_euclid
.
Panics
Panics if the divisor is zero.
Examples
use fixed::{types::I16F16, Wrapping};
let num = Wrapping(I16F16::from_num(7.5));
let den = Wrapping(I16F16::from_num(2));
assert_eq!(num.div_euclid(den), Wrapping(I16F16::from_num(3)));
let quarter = Wrapping(I16F16::from_num(0.25));
let check = (Wrapping(I16F16::MAX) * 4i32).round_to_zero();
assert_eq!(Wrapping(I16F16::MAX).div_euclid(quarter), check);
Remainder for Euclidean division.
See also FixedI32::rem_euclid
and
FixedU32::rem_euclid
.
Panics
Panics if the divisor is zero.
Examples
use fixed::{types::I16F16, Wrapping};
let num = Wrapping(I16F16::from_num(7.5));
let den = Wrapping(I16F16::from_num(2));
assert_eq!(num.rem_euclid(den), Wrapping(I16F16::from_num(1.5)));
assert_eq!((-num).rem_euclid(den), Wrapping(I16F16::from_num(0.5)));
Euclidean division by an integer.
See also
FixedI32::wrapping_div_euclid_int
and
FixedU32::wrapping_div_euclid_int
.
Panics
Panics if the divisor is zero.
Examples
use fixed::{types::I16F16, Wrapping};
let num = Wrapping(I16F16::from_num(7.5));
assert_eq!(num.div_euclid_int(2), Wrapping(I16F16::from_num(3)));
let min = Wrapping(I16F16::MIN);
assert_eq!(min.div_euclid_int(-1), min);
Remainder for Euclidean division.
See also
FixedI32::wrapping_rem_euclid_int
and
FixedU32::wrapping_rem_euclid_int
.
Panics
Panics if the divisor is zero.
Examples
use fixed::{types::I16F16, Wrapping};
let num = Wrapping(I16F16::from_num(7.5));
assert_eq!(num.rem_euclid_int(2), Wrapping(I16F16::from_num(1.5)));
assert_eq!((-num).rem_euclid_int(2), Wrapping(I16F16::from_num(0.5)));
Returns the number of bits required to represent the value.
The number of bits required includes an initial one for negative numbers, and an initial zero for non-negative numbers.
See also FixedI32::signed_bits
.
Examples
use fixed::{types::I4F4, Wrapping};
assert_eq!(Wrapping(I4F4::from_num(-3)).signed_bits(), 7); // “_101.0000”
assert_eq!(Wrapping(I4F4::from_num(-1)).signed_bits(), 5); // “___1.0000”
assert_eq!(Wrapping(I4F4::from_num(-0.0625)).signed_bits(), 1); // “____.___1”
assert_eq!(Wrapping(I4F4::from_num(0)).signed_bits(), 1); // “____.___0”
assert_eq!(Wrapping(I4F4::from_num(0.0625)).signed_bits(), 2); // “____.__01”
assert_eq!(Wrapping(I4F4::from_num(1)).signed_bits(), 6); // “__01.0000”
assert_eq!(Wrapping(I4F4::from_num(3)).signed_bits(), 7); // “_011.0000”
Returns true
if the number is > 0.
See also FixedI32::is_positive
.
Examples
use fixed::{types::I16F16, Wrapping};
assert!(Wrapping(I16F16::from_num(4.3)).is_positive());
assert!(!Wrapping(I16F16::ZERO).is_positive());
assert!(!Wrapping(I16F16::from_num(-4.3)).is_positive());
Returns true
if the number is < 0.
See also FixedI32::is_negative
.
Examples
use fixed::{types::I16F16, Wrapping};
assert!(!Wrapping(I16F16::from_num(4.3)).is_negative());
assert!(!Wrapping(I16F16::ZERO).is_negative());
assert!(Wrapping(I16F16::from_num(-4.3)).is_negative());
Wrapping absolute value. Returns the absolute value, wrapping on overflow.
Overflow can only occur when trying to find the absolute value of the minimum value.
See also FixedI32::wrapping_abs
.
Examples
use fixed::{types::I16F16, Wrapping};
assert_eq!(Wrapping(I16F16::from_num(-5)).abs(), Wrapping(I16F16::from_num(5)));
assert_eq!(Wrapping(I16F16::MIN).abs(), Wrapping(I16F16::MIN));
Returns a number representing the sign of self
.
Warning
Using this method when 1 and −1 cannot be represented is almost certainly a bug, however, this is allowed and gives the following wrapped results.
- When there are no integer bits, for example for the type
Wrapping<I0F16>
, the return value is always zero. - When there is one integer bit, for example for the type
Wrapping<I1F15>
, the return value is zero whenself
is zero, and −1 otherwise. This means that for a positive number, −1 is returned, because +1 does not fit and is wrapped to −1.
See also
FixedI32::wrapping_signum
.
Examples
use fixed::{
types::{I0F32, I1F31, I16F16},
Wrapping,
};
assert_eq!(Wrapping(<I16F16>::from_num(-3.9)).signum(), Wrapping(I16F16::from_num(-1)));
assert_eq!(Wrapping(<I16F16>::ZERO).signum(), Wrapping(I16F16::ZERO));
assert_eq!(Wrapping(<I16F16>::from_num(3.9)).signum(), Wrapping(I16F16::ONE));
assert_eq!(Wrapping(<I1F31>::from_num(0.5)).signum(), Wrapping(I1F31::from_num(-1)));
assert_eq!(Wrapping(<I0F32>::from_num(0.25)).signum(), Wrapping(I0F32::ZERO));
assert_eq!(Wrapping(<I0F32>::from_num(-0.5)).signum(), Wrapping(I0F32::ZERO));
Returns the number of bits required to represent the value.
See also
FixedU32::significant_bits
.
Examples
use fixed::{types::U4F4, Wrapping};
assert_eq!(Wrapping(U4F4::from_num(0)).significant_bits(), 0); // “____.____”
assert_eq!(Wrapping(U4F4::from_num(0.0625)).significant_bits(), 1); // “____.___1”
assert_eq!(Wrapping(U4F4::from_num(1)).significant_bits(), 5); // “___1.0000”
assert_eq!(Wrapping(U4F4::from_num(3)).significant_bits(), 6); // “__11.0000”
Returns true
if the fixed-point number is
2k for some integer k.
See also
FixedU32::is_power_of_two
.
Examples
use fixed::{types::U16F16, Wrapping};
assert!(Wrapping(U16F16::from_num(0.5)).is_power_of_two());
assert!(Wrapping(U16F16::from_num(4)).is_power_of_two());
assert!(!Wrapping(U16F16::from_num(5)).is_power_of_two());
Returns the highest one in the binary representation, or zero
if self
is zero.
If self
> 0, the highest one is equal to the largest power
of two that is ≤ self
.
See also FixedU32::highest_one
.
Examples
use fixed::{types::U16F16, Wrapping};
type T = Wrapping<U16F16>;
assert_eq!(T::from_bits(0b11_0010).highest_one(), T::from_bits(0b10_0000));
assert_eq!(T::from_num(0.3).highest_one(), T::from_num(0.25));
assert_eq!(T::from_num(4).highest_one(), T::from_num(4));
assert_eq!(T::from_num(6.5).highest_one(), T::from_num(4));
assert_eq!(T::ZERO.highest_one(), T::ZERO);
Returns the smallest power of two that is ≥ self
.
If the next power of two is too large to fit, it is wrapped to zero.
See also
FixedU32::wrapping_next_power_of_two
.
Examples
use fixed::{types::U16F16, Wrapping};
type T = Wrapping<U16F16>;
assert_eq!(T::from_bits(0b11_0010).next_power_of_two(), T::from_bits(0b100_0000));
assert_eq!(T::from_num(0.3).next_power_of_two(), T::from_num(0.5));
assert_eq!(T::from_num(4).next_power_of_two(), T::from_num(4));
assert_eq!(T::from_num(6.5).next_power_of_two(), T::from_num(8));
// if the next power of two is too large, it is wrapped to zero
assert_eq!(T::MAX.next_power_of_two(), T::ZERO);
Trait Implementations
Performs the +=
operation. Read more
Performs the +=
operation. Read more
Performs the &=
operation. Read more
Performs the &=
operation. Read more
Performs the |=
operation. Read more
Performs the |=
operation. Read more
Performs the ^=
operation. Read more
Performs the ^=
operation. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Deserialize this value from the given Serde deserializer. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the /=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
Performs the *=
operation. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the %=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the <<=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the >>=
operation. Read more
Performs the -=
operation. Read more
Performs the -=
operation. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Convert a reference to the inner type into a reference to the wrapper type. Read more
Convert a mutable reference to the inner type into a mutable reference to the wrapper type. Read more
Convert a slice to the inner type into a slice to the wrapper type.
Convert a mutable slice to the inner type into a mutable slice to the wrapper type. Read more
Convert a reference to the wrapper type into a reference to the inner type. Read more
Convert a mutable reference to the wrapper type into a mutable reference to the inner type. Read more
Convert a slice to the wrapped type into a slice to the inner type.
Convert a mutable slice to the wrapped type into a mutable slice to the inner type. Read more
Auto Trait Implementations
impl<F> RefUnwindSafe for Wrapping<F> where
F: RefUnwindSafe,
impl<F> UnwindSafe for Wrapping<F> where
F: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
Casts the value.
Performs the conversion.
Performs the conversion.
Casts the value.
Casts the value.
Casts the value.
Casts the value.