@@ -381,16 +381,18 @@ impl f32 {
381381 /// assert!(!f.is_nan());
382382 /// ```
383383 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
384+ #[ rustc_const_unstable( feature = "const_float_classify" , issue = "72505" ) ]
384385 #[ inline]
385- pub fn is_nan ( self ) -> bool {
386+ pub const fn is_nan ( self ) -> bool {
386387 self != self
387388 }
388389
389390 // FIXME(#50145): `abs` is publicly unavailable in libcore due to
390391 // concerns about portability, so this implementation is for
391392 // private use internally.
392393 #[ inline]
393- fn abs_private ( self ) -> f32 {
394+ #[ rustc_const_unstable( feature = "const_float_classify" , issue = "72505" ) ]
395+ const fn abs_private ( self ) -> f32 {
394396 f32:: from_bits ( self . to_bits ( ) & 0x7fff_ffff )
395397 }
396398
@@ -410,8 +412,9 @@ impl f32 {
410412 /// assert!(neg_inf.is_infinite());
411413 /// ```
412414 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
415+ #[ rustc_const_unstable( feature = "const_float_classify" , issue = "72505" ) ]
413416 #[ inline]
414- pub fn is_infinite ( self ) -> bool {
417+ pub const fn is_infinite ( self ) -> bool {
415418 self . abs_private ( ) == Self :: INFINITY
416419 }
417420
@@ -430,8 +433,9 @@ impl f32 {
430433 /// assert!(!neg_inf.is_finite());
431434 /// ```
432435 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
436+ #[ rustc_const_unstable( feature = "const_float_classify" , issue = "72505" ) ]
433437 #[ inline]
434- pub fn is_finite ( self ) -> bool {
438+ pub const fn is_finite ( self ) -> bool {
435439 // There's no need to handle NaN separately: if self is NaN,
436440 // the comparison is not true, exactly as desired.
437441 self . abs_private ( ) < Self :: INFINITY
@@ -457,9 +461,10 @@ impl f32 {
457461 /// ```
458462 /// [subnormal]: https://en.wikipedia.org/wiki/Denormal_number
459463 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
464+ #[ rustc_const_unstable( feature = "const_float_classify" , issue = "72505" ) ]
460465 #[ inline]
461- pub fn is_normal ( self ) -> bool {
462- self . classify ( ) == FpCategory :: Normal
466+ pub const fn is_normal ( self ) -> bool {
467+ matches ! ( self . classify( ) , FpCategory :: Normal )
463468 }
464469
465470 /// Returns the floating point category of the number. If only one property
@@ -476,7 +481,8 @@ impl f32 {
476481 /// assert_eq!(inf.classify(), FpCategory::Infinite);
477482 /// ```
478483 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
479- pub fn classify ( self ) -> FpCategory {
484+ #[ rustc_const_unstable( feature = "const_float_classify" , issue = "72505" ) ]
485+ pub const fn classify ( self ) -> FpCategory {
480486 const EXP_MASK : u32 = 0x7f800000 ;
481487 const MAN_MASK : u32 = 0x007fffff ;
482488
@@ -501,8 +507,9 @@ impl f32 {
501507 /// assert!(!g.is_sign_positive());
502508 /// ```
503509 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
510+ #[ rustc_const_unstable( feature = "const_float_classify" , issue = "72505" ) ]
504511 #[ inline]
505- pub fn is_sign_positive ( self ) -> bool {
512+ pub const fn is_sign_positive ( self ) -> bool {
506513 !self . is_sign_negative ( )
507514 }
508515
@@ -517,8 +524,9 @@ impl f32 {
517524 /// assert!(g.is_sign_negative());
518525 /// ```
519526 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
527+ #[ rustc_const_unstable( feature = "const_float_classify" , issue = "72505" ) ]
520528 #[ inline]
521- pub fn is_sign_negative ( self ) -> bool {
529+ pub const fn is_sign_negative ( self ) -> bool {
522530 // IEEE754 says: isSignMinus(x) is true if and only if x has negative sign. isSignMinus
523531 // applies to zeros and NaNs as well.
524532 self . to_bits ( ) & 0x8000_0000 != 0
0 commit comments