@@ -307,7 +307,39 @@ impl f32 {
307307 /// let abs_difference = (x.powi(2) - (x * x)).abs();
308308 /// assert!(abs_difference <= 1e-5);
309309 ///
310- /// assert_eq!(f32::powi(f32::NAN, 0), 1.0);
310+ /// // Special cases:
311+ /// // pow(x, +-0) = 1 for any x
312+ /// assert_eq!(f32::powi(3.0, 0), 1.0);
313+ ///
314+ /// // pow(1, y) = 1 for any y
315+ /// assert_eq!(f32::powi(1.0, 2), 1.0);
316+ ///
317+ /// // pow(x, 1) = x for any x
318+ /// assert_eq!(f32::powi(3.0, 1), 3.0);
319+ ///
320+ /// // pow(nan, y) = nan
321+ /// assert!(f32::powi(f32::NAN, 2).is_nan());
322+ ///
323+ /// // pow(+-0, y) = +-inf for y an odd integer < 0
324+ /// assert_eq!(f32::powi(0.0, -3), f32::INFINITY);
325+ ///
326+ /// // pow(+-0, y) = +inf for finite y < 0 and not an odd integer
327+ /// assert_eq!(f32::powi(0.0, -2), f32::INFINITY);
328+ ///
329+ /// // pow(+-0, y) = +-0 for y an odd integer > 0
330+ /// assert_eq!(f32::powi(-0.0, 3), -0.0);
331+ ///
332+ /// // pow(+-0, y) = +0 for finite y > 0 and not an odd integer
333+ /// assert_eq!(f32::powi(0.0, 2), 0.0);
334+ ///
335+ /// // pow(+inf, y) = +inf for y > 0
336+ /// assert_eq!(f32::powi(f32::INFINITY, 2), f32::INFINITY);
337+ ///
338+ /// // pow(+inf, y) = +0 for y < 0
339+ /// assert_eq!(f32::powi(f32::INFINITY, -2), 0.0);
340+ ///
341+ /// // pow(-inf, y) = pow(-0, -y)
342+ /// assert_eq!(f32::powi(f32::NEG_INFINITY, 2), f32::powi(-0.0, -2));
311343 /// ```
312344 #[ rustc_allow_incoherent_impl]
313345 #[ must_use = "method returns a new number and does not mutate the original value" ]
@@ -331,8 +363,66 @@ impl f32 {
331363 /// let abs_difference = (x.powf(2.0) - (x * x)).abs();
332364 /// assert!(abs_difference <= 1e-5);
333365 ///
334- /// assert_eq!(f32::powf(1.0, f32::NAN), 1.0);
335- /// assert_eq!(f32::powf(f32::NAN, 0.0), 1.0);
366+ /// // Special cases:
367+ /// // pow(x, +-0) = 1 for any x
368+ /// assert_eq!(f32::powf(3.0, 0.0), 1.0);
369+ ///
370+ /// // pow(1, y) = 1 for any y
371+ /// assert_eq!(f32::powf(1.0, 2.0), 1.0);
372+ ///
373+ /// // pow(x, 1) = x for any x
374+ /// assert_eq!(f32::powf(3.0, 1.0), 3.0);
375+ ///
376+ /// // pow(nan, y) = nan
377+ /// assert!(f32::powf(f32::NAN, 2.0).is_nan());
378+ ///
379+ /// // pow(x, nan) = nan
380+ /// assert!(f32::powf(2.0, f32::NAN).is_nan());
381+ ///
382+ /// // pow(+-0, y) = +-inf for y an odd integer < 0
383+ /// assert_eq!(f32::powf(0.0, -3.0), f32::INFINITY);
384+ ///
385+ /// // pow(+-0, -inf) = +inf
386+ /// assert_eq!(f32::powf(0.0, f32::NEG_INFINITY), f32::INFINITY);
387+ ///
388+ /// // pow(+-0, +inf) = +0
389+ /// assert_eq!(f32::powf(0.0, f32::INFINITY), 0.0);
390+ ///
391+ /// // pow(+-0, y) = +inf for finite y < 0 and not an odd integer
392+ /// assert_eq!(f32::powf(0.0, -2.0), f32::INFINITY);
393+ ///
394+ /// // pow(+-0, y) = +-0 for y an odd integer > 0
395+ /// assert_eq!(f32::powf(-0.0, 3.0), -0.0);
396+ ///
397+ /// // pow(+-0, y) = +0 for finite y > 0 and not an odd integer
398+ /// assert_eq!(f32::powf(0.0, 2.0), 0.0);
399+ ///
400+ /// // pow(-1, +-inf) = 1
401+ /// assert_eq!(f32::powf(-1.0, f32::INFINITY), 1.0);
402+ ///
403+ /// // pow(x, +inf) = +inf for |x| > 1
404+ /// assert_eq!(f32::powf(2.0, f32::INFINITY), f32::INFINITY);
405+ ///
406+ /// // pow(x, -inf) = +0 for |x| > 1
407+ /// assert_eq!(f32::powf(2.0, f32::NEG_INFINITY), 0.0);
408+ ///
409+ /// // pow(x, +inf) = +0 for |x| < 1
410+ /// assert_eq!(f32::powf(0.5, f32::INFINITY), 0.0);
411+ ///
412+ /// // pow(x, -inf) = +inf for |x| < 1
413+ /// assert_eq!(f32::powf(0.5, f32::NEG_INFINITY), f32::INFINITY);
414+ ///
415+ /// // pow(+inf, y) = +inf for y > 0
416+ /// assert_eq!(f32::powf(f32::INFINITY, 2.0), f32::INFINITY);
417+ ///
418+ /// // pow(+inf, y) = +0 for y < 0
419+ /// assert_eq!(f32::powf(f32::INFINITY, -2.0), 0.0);
420+ ///
421+ /// // pow(-inf, y) = pow(-0, -y)
422+ /// assert_eq!(f32::powf(f32::NEG_INFINITY, 2.0), f32::powf(-0.0, -2.0));
423+ ///
424+ /// // pow(x, y) = nan for finite x < 0 and finite non-integer y
425+ /// assert!(f32::powf(-2.0, 0.5).is_nan());
336426 /// ```
337427 #[ rustc_allow_incoherent_impl]
338428 #[ must_use = "method returns a new number and does not mutate the original value" ]
0 commit comments