File tree Expand file tree Collapse file tree 4 files changed +96
-1
lines changed Expand file tree Collapse file tree 4 files changed +96
-1
lines changed Original file line number Diff line number Diff line change @@ -508,6 +508,14 @@ impl Real for f32 {
508
508
fn tanh ( & self ) -> f32 { tanh ( * self ) }
509
509
}
510
510
511
+ impl Bounded for f32 {
512
+ #[ inline( always) ]
513
+ fn min_value ( ) -> f32 { 1.17549435e-38 }
514
+
515
+ #[ inline( always) ]
516
+ fn max_value ( ) -> f32 { 3.40282347e+38 }
517
+ }
518
+
511
519
impl Primitive for f32 {
512
520
#[ inline( always) ]
513
521
fn bits ( ) -> uint { 32 }
@@ -532,6 +540,27 @@ impl Float for f32 {
532
540
#[ inline( always) ]
533
541
fn is_NaN ( & self ) -> bool { * self != * self }
534
542
543
+ #[ inline( always) ]
544
+ fn mantissa_digits ( ) -> uint { 24 }
545
+
546
+ #[ inline( always) ]
547
+ fn digits ( ) -> uint { 6 }
548
+
549
+ #[ inline( always) ]
550
+ fn epsilon ( ) -> f32 { 1.19209290e-07 }
551
+
552
+ #[ inline( always) ]
553
+ fn min_exp ( ) -> int { -125 }
554
+
555
+ #[ inline( always) ]
556
+ fn max_exp ( ) -> int { 128 }
557
+
558
+ #[ inline( always) ]
559
+ fn min_10_exp ( ) -> int { -37 }
560
+
561
+ #[ inline( always) ]
562
+ fn max_10_exp ( ) -> int { 38 }
563
+
535
564
/// Returns `true` if the number is infinite
536
565
#[ inline( always) ]
537
566
fn is_infinite ( & self ) -> bool {
Original file line number Diff line number Diff line change @@ -548,6 +548,14 @@ impl RealExt for f64 {
548
548
fn yn ( & self , n : int ) -> f64 { yn ( n as c_int , * self ) }
549
549
}
550
550
551
+ impl Bounded for f64 {
552
+ #[ inline( always) ]
553
+ fn min_value ( ) -> f64 { 2.2250738585072014e-308 }
554
+
555
+ #[ inline( always) ]
556
+ fn max_value ( ) -> f64 { 1.7976931348623157e+308 }
557
+ }
558
+
551
559
impl Primitive for f64 {
552
560
#[ inline( always) ]
553
561
fn bits ( ) -> uint { 64 }
@@ -584,6 +592,27 @@ impl Float for f64 {
584
592
!( self . is_NaN ( ) || self . is_infinite ( ) )
585
593
}
586
594
595
+ #[ inline( always) ]
596
+ fn mantissa_digits ( ) -> uint { 53 }
597
+
598
+ #[ inline( always) ]
599
+ fn digits ( ) -> uint { 15 }
600
+
601
+ #[ inline( always) ]
602
+ fn epsilon ( ) -> f64 { 2.2204460492503131e-16 }
603
+
604
+ #[ inline( always) ]
605
+ fn min_exp ( ) -> int { -1021 }
606
+
607
+ #[ inline( always) ]
608
+ fn max_exp ( ) -> int { 1024 }
609
+
610
+ #[ inline( always) ]
611
+ fn min_10_exp ( ) -> int { -307 }
612
+
613
+ #[ inline( always) ]
614
+ fn max_10_exp ( ) -> int { 308 }
615
+
587
616
///
588
617
/// Fused multiply-add. Computes `(self * a) + b` with only one rounding error. This
589
618
/// produces a more accurate result with better performance than a separate multiplication
Original file line number Diff line number Diff line change @@ -700,6 +700,14 @@ impl Signed for float {
700
700
fn is_negative(&self) -> bool { *self < 0.0 || (1.0 / *self) == neg_infinity }
701
701
}
702
702
703
+ impl Bounded for float {
704
+ #[inline(always)]
705
+ fn min_value() -> float { Bounded::min_value::<f64>() as float }
706
+
707
+ #[inline(always)]
708
+ fn max_value() -> float { Bounded::max_value::<f64>() as float }
709
+ }
710
+
703
711
impl Primitive for float {
704
712
#[inline(always)]
705
713
fn bits() -> uint { Primitive::bits::<f64>() }
@@ -724,6 +732,27 @@ impl Float for float {
724
732
#[inline(always)]
725
733
fn is_NaN(&self) -> bool { *self != *self }
726
734
735
+ #[inline(always)]
736
+ fn mantissa_digits() -> uint { Float::mantissa_digits::<f64>() }
737
+
738
+ #[inline(always)]
739
+ fn digits() -> uint { Float::digits::<f64>() }
740
+
741
+ #[inline(always)]
742
+ fn epsilon() -> float { Float::epsilon::<f64>() as float }
743
+
744
+ #[inline(always)]
745
+ fn min_exp() -> int { Float::min_exp::<f64>() }
746
+
747
+ #[inline(always)]
748
+ fn max_exp() -> int { Float::max_exp::<f64>() }
749
+
750
+ #[inline(always)]
751
+ fn min_10_exp() -> int { Float::min_10_exp::<f64>() }
752
+
753
+ #[inline(always)]
754
+ fn max_10_exp() -> int { Float::max_10_exp::<f64>() }
755
+
727
756
/// Returns `true` if the number is infinite
728
757
#[inline(always)]
729
758
fn is_infinite(&self) -> bool {
Original file line number Diff line number Diff line change @@ -219,6 +219,7 @@ pub trait Bounded {
219
219
///
220
220
pub trait Primitive : Num
221
221
+ NumCast
222
+ + Bounded
222
223
+ Neg < Self >
223
224
+ Add < Self , Self >
224
225
+ Sub < Self , Self >
@@ -235,7 +236,6 @@ pub trait Primitive: Num
235
236
///
236
237
pub trait Int : Integer
237
238
+ Primitive
238
- + Bounded
239
239
+ Bitwise
240
240
+ BitCount { }
241
241
@@ -255,6 +255,14 @@ pub trait Float: Real
255
255
fn is_infinite ( & self ) -> bool ;
256
256
fn is_finite ( & self ) -> bool ;
257
257
258
+ fn mantissa_digits ( ) -> uint ;
259
+ fn digits ( ) -> uint ;
260
+ fn epsilon ( ) -> Self ;
261
+ fn min_exp ( ) -> int ;
262
+ fn max_exp ( ) -> int ;
263
+ fn min_10_exp ( ) -> int ;
264
+ fn max_10_exp ( ) -> int ;
265
+
258
266
fn mul_add ( & self , a : Self , b : Self ) -> Self ;
259
267
fn next_after ( & self , other : Self ) -> Self ;
260
268
}
You can’t perform that action at this time.
0 commit comments