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 @@ -40,6 +40,7 @@ pub trait Float:
40
40
const MAX_MANTISSA_FAST_PATH : u64 = 2_u64 << Self :: MANTISSA_EXPLICIT_BITS ;
41
41
42
42
fn from_u64 ( v : u64 ) -> Self ;
43
+ fn from_u64_bits ( v : u64 ) -> Self ;
43
44
fn pow10_fast_path ( exponent : usize ) -> Self ;
44
45
}
45
46
@@ -67,6 +68,11 @@ impl Float for f32 {
67
68
v as _
68
69
}
69
70
71
+ #[ inline]
72
+ fn from_u64_bits ( v : u64 ) -> Self {
73
+ f32:: from_bits ( ( v & 0xFFFFFFFF ) as u32 )
74
+ }
75
+
70
76
#[ inline]
71
77
fn pow10_fast_path ( exponent : usize ) -> Self {
72
78
#[ allow( clippy:: use_self) ]
@@ -101,6 +107,11 @@ impl Float for f64 {
101
107
v as _
102
108
}
103
109
110
+ #[ inline]
111
+ fn from_u64_bits ( v : u64 ) -> Self {
112
+ f64:: from_bits ( v)
113
+ }
114
+
104
115
#[ inline]
105
116
fn pow10_fast_path ( exponent : usize ) -> Self {
106
117
#[ 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