File tree 2 files changed +12
-11
lines changed
2 files changed +12
-11
lines changed Original file line number Diff line number Diff line change @@ -41,6 +41,7 @@ pub trait Float:
41
41
const MAX_MANTISSA_FAST_PATH : u64 = 2_u64 << Self :: MANTISSA_EXPLICIT_BITS ;
42
42
43
43
fn from_u64 ( v : u64 ) -> Self ;
44
+ fn from_u64_bits ( v : u64 ) -> Self ;
44
45
fn pow10_fast_path ( exponent : usize ) -> Self ;
45
46
}
46
47
@@ -69,6 +70,11 @@ impl Float for f32 {
69
70
v as _
70
71
}
71
72
73
+ #[ inline]
74
+ fn from_u64_bits ( v : u64 ) -> Self {
75
+ f32:: from_bits ( ( v & 0xFFFFFFFF ) as u32 )
76
+ }
77
+
72
78
#[ inline]
73
79
fn pow10_fast_path ( exponent : usize ) -> Self {
74
80
#[ allow( clippy:: use_self) ]
@@ -104,6 +110,11 @@ impl Float for f64 {
104
110
v as _
105
111
}
106
112
113
+ #[ inline]
114
+ fn from_u64_bits ( v : u64 ) -> Self {
115
+ f64:: from_bits ( v)
116
+ }
117
+
107
118
#[ inline]
108
119
fn pow10_fast_path ( exponent : usize ) -> Self {
109
120
#[ allow( clippy:: use_self) ]
Original file line number Diff line number Diff line change 1
- use core:: mem;
2
-
3
1
use crate :: binary:: compute_float;
4
2
use crate :: float:: Float ;
5
3
use crate :: number:: { parse_inf_nan, parse_number} ;
@@ -32,13 +30,5 @@ pub fn parse_float<F: Float>(s: &[u8]) -> Option<(F, usize)> {
32
30
if num. negative {
33
31
word |= 1_u64 << F :: SIGN_INDEX ;
34
32
}
35
- let value = unsafe {
36
- if cfg ! ( target_endian = "big" ) && mem:: size_of :: < F > ( ) == 4 {
37
- * ( & word as * const _ as * const F ) . add ( 1 )
38
- } else {
39
- * ( & word as * const _ as * const F )
40
- }
41
- } ;
42
-
43
- Some ( ( value, rest) )
33
+ Some ( ( F :: from_u64_bits ( word) , rest) )
44
34
}
You can’t perform that action at this time.
0 commit comments