Add documentation to float conversion methods
This commit is contained in:
parent
ad47f0874a
commit
df53a3fd55
|
@ -450,10 +450,8 @@ impl f32 {
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use std::f32;
|
|
||||||
/// let v = f32::from_bits(0x41480000);
|
/// let v = f32::from_bits(0x41480000);
|
||||||
/// let difference = (v - 12.5).abs();
|
/// assert_eq!(v, 12.5);
|
||||||
/// assert!(difference <= 1e-5);
|
|
||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "float_bits_conv", since = "1.20.0")]
|
#[stable(feature = "float_bits_conv", since = "1.20.0")]
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -462,13 +460,15 @@ impl f32 {
|
||||||
unsafe { mem::transmute(v) }
|
unsafe { mem::transmute(v) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the floating point value as a byte array in big-endian byte order.
|
/// Return the memory representation of this floating point number as a byte array in
|
||||||
|
/// big-endian (network) byte order.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// assert_eq!(0.0f32.to_be_bytes(), [0b0000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]);
|
/// #![feature(float_to_from_bytes)]
|
||||||
/// assert_eq!(1.0f32.to_be_bytes(), [0b0111_1111, 0b1000_0000, 0b0000_0000, 0b0000_0000]);
|
/// let bytes = 12.5f32.to_be_bytes();
|
||||||
|
/// assert_eq!(bytes, [0x41, 0x48, 0x00, 0x00]);
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -476,13 +476,15 @@ impl f32 {
|
||||||
self.to_bits().to_be_bytes()
|
self.to_bits().to_be_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the floating point value as a byte array in little-endian byte order.
|
/// Return the memory representation of this floating point number as a byte array in
|
||||||
|
/// little-endian byte order.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// assert_eq!(0.0f32.to_le_bytes(), [0b0000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]);
|
/// #![feature(float_to_from_bytes)]
|
||||||
/// assert_eq!(1.0f32.to_le_bytes(), [0b0000_0000, 0b0000_0000, 0b1000_0000, 0b0111_1111]);
|
/// let bytes = 12.5f32.to_le_bytes();
|
||||||
|
/// assert_eq!(bytes, [0x00, 0x00, 0x48, 0x41]);
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -490,22 +492,27 @@ impl f32 {
|
||||||
self.to_bits().to_le_bytes()
|
self.to_bits().to_le_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the floating point value as a byte array in native byte order.
|
/// Return the memory representation of this floating point number as a byte array in
|
||||||
///
|
/// native byte order.
|
||||||
///
|
///
|
||||||
/// As the target platform's native endianness is used, portable code
|
/// As the target platform's native endianness is used, portable code
|
||||||
/// should use [`to_be_bytes`] or [`to_le_bytes`], as appropriate, instead.
|
/// should use [`to_be_bytes`] or [`to_le_bytes`], as appropriate, instead.
|
||||||
///
|
///
|
||||||
|
/// [`to_be_bytes`]: #method.to_be_bytes
|
||||||
|
/// [`to_le_bytes`]: #method.to_le_bytes
|
||||||
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let bytes = 12.5f32.to_ne_bytes();
|
||||||
/// assert_eq!(
|
/// assert_eq!(
|
||||||
/// u32::from_ne_bytes(0.0f32.to_ne_bytes()),
|
/// bytes,
|
||||||
/// 0b0000_0000_0000_0000_0000_0000_0000_0000,
|
/// if cfg!(target_endian = "big") {
|
||||||
/// );
|
/// [0x41, 0x48, 0x00, 0x00]
|
||||||
/// assert_eq!(
|
/// } else {
|
||||||
/// u32::from_ne_bytes(1.0f32.to_ne_bytes()),
|
/// [0x00, 0x00, 0x48, 0x41]
|
||||||
/// 0b0111_1111_1000_0000_0000_0000_0000_0000,
|
/// }
|
||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
|
@ -514,18 +521,56 @@ impl f32 {
|
||||||
self.to_bits().to_ne_bytes()
|
self.to_bits().to_ne_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a floating point value from its representation as a byte array in big endian.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let value = f32::from_be_bytes([0x41, 0x48, 0x00, 0x00]);
|
||||||
|
/// assert_eq!(value, 12.5);
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_be_bytes(bytes: [u8; 4]) -> Self {
|
pub fn from_be_bytes(bytes: [u8; 4]) -> Self {
|
||||||
Self::from_bits(u32::from_be_bytes(bytes))
|
Self::from_bits(u32::from_be_bytes(bytes))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a floating point value from its representation as a byte array in big endian.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let value = f32::from_le_bytes([0x00, 0x00, 0x48, 0x41]);
|
||||||
|
/// assert_eq!(value, 12.5);
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_le_bytes(bytes: [u8; 4]) -> Self {
|
pub fn from_le_bytes(bytes: [u8; 4]) -> Self {
|
||||||
Self::from_bits(u32::from_le_bytes(bytes))
|
Self::from_bits(u32::from_le_bytes(bytes))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a floating point value from its representation as a byte array in big endian.
|
||||||
|
///
|
||||||
|
/// As the target platform's native endianness is used, portable code
|
||||||
|
/// likely wants to use [`from_be_bytes`] or [`from_le_bytes`], as
|
||||||
|
/// appropriate instead.
|
||||||
|
///
|
||||||
|
/// [`from_be_bytes`]: #method.from_be_bytes
|
||||||
|
/// [`from_le_bytes`]: #method.from_le_bytes
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let value = f32::from_ne_bytes(if cfg!(target_endian = "big") {
|
||||||
|
/// [0x41, 0x48, 0x00, 0x00]
|
||||||
|
/// } else {
|
||||||
|
/// [0x00, 0x00, 0x48, 0x41]
|
||||||
|
/// });
|
||||||
|
/// assert_eq!(value, 12.5);
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_ne_bytes(bytes: [u8; 4]) -> Self {
|
pub fn from_ne_bytes(bytes: [u8; 4]) -> Self {
|
||||||
|
|
|
@ -463,10 +463,8 @@ impl f64 {
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use std::f64;
|
|
||||||
/// let v = f64::from_bits(0x4029000000000000);
|
/// let v = f64::from_bits(0x4029000000000000);
|
||||||
/// let difference = (v - 12.5).abs();
|
/// assert_eq!(v, 12.5);
|
||||||
/// assert!(difference <= 1e-5);
|
|
||||||
/// ```
|
/// ```
|
||||||
#[stable(feature = "float_bits_conv", since = "1.20.0")]
|
#[stable(feature = "float_bits_conv", since = "1.20.0")]
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -475,36 +473,117 @@ impl f64 {
|
||||||
unsafe { mem::transmute(v) }
|
unsafe { mem::transmute(v) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return the memory representation of this floating point number as a byte array in
|
||||||
|
/// big-endian (network) byte order.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let bytes = 12.5f64.to_be_bytes();
|
||||||
|
/// assert_eq!(bytes, [0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn to_be_bytes(self) -> [u8; 8] {
|
pub fn to_be_bytes(self) -> [u8; 8] {
|
||||||
self.to_bits().to_be_bytes()
|
self.to_bits().to_be_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return the memory representation of this floating point number as a byte array in
|
||||||
|
/// little-endian byte order.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let bytes = 12.5f64.to_le_bytes();
|
||||||
|
/// assert_eq!(bytes, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x40]);
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn to_le_bytes(self) -> [u8; 8] {
|
pub fn to_le_bytes(self) -> [u8; 8] {
|
||||||
self.to_bits().to_le_bytes()
|
self.to_bits().to_le_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return the memory representation of this floating point number as a byte array in
|
||||||
|
/// native byte order.
|
||||||
|
///
|
||||||
|
/// As the target platform's native endianness is used, portable code
|
||||||
|
/// should use [`to_be_bytes`] or [`to_le_bytes`], as appropriate, instead.
|
||||||
|
///
|
||||||
|
/// [`to_be_bytes`]: #method.to_be_bytes
|
||||||
|
/// [`to_le_bytes`]: #method.to_le_bytes
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let bytes = 12.5f64.to_ne_bytes();
|
||||||
|
/// assert_eq!(
|
||||||
|
/// bytes,
|
||||||
|
/// if cfg!(target_endian = "big") {
|
||||||
|
/// [0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
|
||||||
|
/// } else {
|
||||||
|
/// [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x40]
|
||||||
|
/// }
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn to_ne_bytes(self) -> [u8; 8] {
|
pub fn to_ne_bytes(self) -> [u8; 8] {
|
||||||
self.to_bits().to_ne_bytes()
|
self.to_bits().to_ne_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a floating point value from its representation as a byte array in big endian.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let value = f64::from_be_bytes([0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
||||||
|
/// assert_eq!(value, 12.5);
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_be_bytes(bytes: [u8; 8]) -> Self {
|
pub fn from_be_bytes(bytes: [u8; 8]) -> Self {
|
||||||
Self::from_bits(u64::from_be_bytes(bytes))
|
Self::from_bits(u64::from_be_bytes(bytes))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a floating point value from its representation as a byte array in big endian.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let value = f64::from_le_bytes([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x40]);
|
||||||
|
/// assert_eq!(value, 12.5);
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_le_bytes(bytes: [u8; 8]) -> Self {
|
pub fn from_le_bytes(bytes: [u8; 8]) -> Self {
|
||||||
Self::from_bits(u64::from_le_bytes(bytes))
|
Self::from_bits(u64::from_le_bytes(bytes))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a floating point value from its representation as a byte array in big endian.
|
||||||
|
///
|
||||||
|
/// As the target platform's native endianness is used, portable code
|
||||||
|
/// likely wants to use [`from_be_bytes`] or [`from_le_bytes`], as
|
||||||
|
/// appropriate instead.
|
||||||
|
///
|
||||||
|
/// [`from_be_bytes`]: #method.from_be_bytes
|
||||||
|
/// [`from_le_bytes`]: #method.from_le_bytes
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(float_to_from_bytes)]
|
||||||
|
/// let value = f64::from_ne_bytes(if cfg!(target_endian = "big") {
|
||||||
|
/// [0x40, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
|
||||||
|
/// } else {
|
||||||
|
/// [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x40]
|
||||||
|
/// });
|
||||||
|
/// assert_eq!(value, 12.5);
|
||||||
|
/// ```
|
||||||
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
#[unstable(feature = "float_to_from_bytes", issue = "60446")]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_ne_bytes(bytes: [u8; 8]) -> Self {
|
pub fn from_ne_bytes(bytes: [u8; 8]) -> Self {
|
||||||
|
|
Loading…
Reference in New Issue