Skip to content

Commit 3d6c6fa

Browse files
committed
Document powf and powi calls that always return 1.0
1 parent 8231e85 commit 3d6c6fa

File tree

4 files changed

+44
-6
lines changed

4 files changed

+44
-6
lines changed

library/std/src/f128.rs

+17-1
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,20 @@ impl f128 {
324324
///
325325
/// The precision of this function is non-deterministic. This means it varies by platform,
326326
/// Rust version, and can even differ within the same execution from one invocation to the next.
327+
///
328+
/// # Examples
329+
///
330+
/// ```
331+
/// #![feature(f128)]
332+
/// # #[cfg(reliable_f128_math)] {
333+
///
334+
/// let x = 2.0_f128;
335+
/// let abs_difference = (x.powi(2) - (x * x)).abs();
336+
/// assert!(abs_difference <= f128::EPSILON);
337+
///
338+
/// assert_eq!(f128::powi(f128::NAN, 0), 1.0);
339+
/// # }
340+
/// ```
327341
#[inline]
328342
#[rustc_allow_incoherent_impl]
329343
#[unstable(feature = "f128", issue = "116909")]
@@ -347,8 +361,10 @@ impl f128 {
347361
///
348362
/// let x = 2.0_f128;
349363
/// let abs_difference = (x.powf(2.0) - (x * x)).abs();
350-
///
351364
/// assert!(abs_difference <= f128::EPSILON);
365+
///
366+
/// assert_eq!(f128::powf(1.0, f128::NAN), 1.0);
367+
/// assert_eq!(f128::powf(f128::NAN, 0.0), 1.0);
352368
/// # }
353369
/// ```
354370
#[inline]

library/std/src/f16.rs

+17-1
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,20 @@ impl f16 {
324324
///
325325
/// The precision of this function is non-deterministic. This means it varies by platform,
326326
/// Rust version, and can even differ within the same execution from one invocation to the next.
327+
///
328+
/// # Examples
329+
///
330+
/// ```
331+
/// #![feature(f16)]
332+
/// # #[cfg(reliable_f16_math)] {
333+
///
334+
/// let x = 2.0_f16;
335+
/// let abs_difference = (x.powi(2) - (x * x)).abs();
336+
/// assert!(abs_difference <= f16::EPSILON);
337+
///
338+
/// assert_eq!(f16::powi(f16::NAN, 0), 1.0);
339+
/// # }
340+
/// ```
327341
#[inline]
328342
#[rustc_allow_incoherent_impl]
329343
#[unstable(feature = "f16", issue = "116909")]
@@ -347,8 +361,10 @@ impl f16 {
347361
///
348362
/// let x = 2.0_f16;
349363
/// let abs_difference = (x.powf(2.0) - (x * x)).abs();
350-
///
351364
/// assert!(abs_difference <= f16::EPSILON);
365+
///
366+
/// assert_eq!(f16::powf(1.0, f16::NAN), 1.0);
367+
/// assert_eq!(f16::powf(f16::NAN, 0.0), 1.0);
352368
/// # }
353369
/// ```
354370
#[inline]

library/std/src/f32.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,9 @@ impl f32 {
306306
/// ```
307307
/// let x = 2.0_f32;
308308
/// let abs_difference = (x.powi(2) - (x * x)).abs();
309-
///
310309
/// assert!(abs_difference <= f32::EPSILON);
310+
///
311+
/// assert_eq!(f32::powi(f32::NAN, 0), 1.0);
311312
/// ```
312313
#[rustc_allow_incoherent_impl]
313314
#[must_use = "method returns a new number and does not mutate the original value"]
@@ -329,8 +330,10 @@ impl f32 {
329330
/// ```
330331
/// let x = 2.0_f32;
331332
/// let abs_difference = (x.powf(2.0) - (x * x)).abs();
332-
///
333333
/// assert!(abs_difference <= f32::EPSILON);
334+
///
335+
/// assert_eq!(f32::powf(1.0, f32::NAN), 1.0);
336+
/// assert_eq!(f32::powf(f32::NAN, 0.0), 1.0);
334337
/// ```
335338
#[rustc_allow_incoherent_impl]
336339
#[must_use = "method returns a new number and does not mutate the original value"]

library/std/src/f64.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,9 @@ impl f64 {
306306
/// ```
307307
/// let x = 2.0_f64;
308308
/// let abs_difference = (x.powi(2) - (x * x)).abs();
309+
/// assert!(abs_difference <= f64::EPSILON);
309310
///
310-
/// assert!(abs_difference < 1e-10);
311+
/// assert_eq!(f64::powi(f64::NAN, 0), 1.0);
311312
/// ```
312313
#[rustc_allow_incoherent_impl]
313314
#[must_use = "method returns a new number and does not mutate the original value"]
@@ -329,8 +330,10 @@ impl f64 {
329330
/// ```
330331
/// let x = 2.0_f64;
331332
/// let abs_difference = (x.powf(2.0) - (x * x)).abs();
333+
/// assert!(abs_difference <= f64::EPSILON);
332334
///
333-
/// assert!(abs_difference < 1e-10);
335+
/// assert_eq!(f64::powf(1.0, f64::NAN), 1.0);
336+
/// assert_eq!(f64::powf(f64::NAN, 0.0), 1.0);
334337
/// ```
335338
#[rustc_allow_incoherent_impl]
336339
#[must_use = "method returns a new number and does not mutate the original value"]

0 commit comments

Comments
 (0)