@@ -96,49 +96,49 @@ Special values:
96
96
decompose (x:: Integer ) = x, 0 , 1
97
97
decompose (x:: Rational ) = num (x), 0 , den (x)
98
98
99
- function decompose (x:: Float16 )
99
+ function decompose (x:: Float16 ):: NTuple{3,Int}
100
100
isnan (x) && return 0 , 0 , 0
101
101
isinf (x) && return ifelse (x < 0 , - 1 , 1 ), 0 , 0
102
102
n = reinterpret (UInt16, x)
103
103
s = (n & 0x03ff ) % Int16
104
104
e = (n & 0x7c00 >> 10 ) % Int
105
105
s |= Int16 (e != 0 ) << 10
106
106
d = ifelse (signbit (x), - 1 , 1 )
107
- Int (s), Int ( e - 25 + (e == 0 ) ), d
107
+ s, e - 25 + (e == 0 ), d
108
108
end
109
109
110
- function decompose (x:: Float32 )
110
+ function decompose (x:: Float32 ):: NTuple{3,Int}
111
111
isnan (x) && return 0 , 0 , 0
112
112
isinf (x) && return ifelse (x < 0 , - 1 , 1 ), 0 , 0
113
113
n = reinterpret (UInt32, x)
114
114
s = (n & 0x007fffff ) % Int32
115
115
e = (n & 0x7f800000 >> 23 ) % Int
116
116
s |= Int32 (e != 0 ) << 23
117
117
d = ifelse (signbit (x), - 1 , 1 )
118
- Int (s), Int (e - 150 + (e == 0 )), d
118
+ s, (e - 150 + (e == 0 )), d
119
119
end
120
120
121
- function decompose (x:: Float64 )
121
+ function decompose (x:: Float64 ):: Tuple{Int64, Int, Int}
122
122
isnan (x) && return 0 , 0 , 0
123
123
isinf (x) && return ifelse (x < 0 , - 1 , 1 ), 0 , 0
124
124
n = reinterpret (UInt64, x)
125
125
s = (n & 0x000fffffffffffff ) % Int64
126
126
e = (n & 0x7ff0000000000000 >> 52 ) % Int
127
127
s |= Int64 (e != 0 ) << 52
128
128
d = ifelse (signbit (x), - 1 , 1 )
129
- s, Int ( e - 1075 + (e == 0 ) ), d
129
+ s, e - 1075 + (e == 0 ), d
130
130
end
131
131
132
- function decompose (x:: BigFloat )
133
- isnan (x) && return big ( 0 ) , 0 , 0
134
- isinf (x) && return big ( x. sign) , 0 , 0
135
- x == 0 && return big ( 0 ) , 0 , Int ( x. sign)
132
+ function decompose (x:: BigFloat ):: Tuple{BigInt, Int, Int}
133
+ isnan (x) && return 0 , 0 , 0
134
+ isinf (x) && return x. sign, 0 , 0
135
+ x == 0 && return 0 , 0 , x. sign
136
136
s = BigInt ()
137
137
s. size = cld (x. prec, 8 * sizeof (GMP. Limb)) # limbs
138
138
b = s. size * sizeof (GMP. Limb) # bytes
139
139
ccall ((:__gmpz_realloc2 , :libgmp ), Void, (Ptr{BigInt}, Culong), & s, 8 b) # bits
140
140
ccall (:memcpy , Ptr{Void}, (Ptr{Void}, Ptr{Void}, Csize_t), s. d, x. d, b) # bytes
141
- s, Int ( x. exp - 8 b), Int ( x. sign)
141
+ s, x. exp - 8 b, x. sign
142
142
end
143
143
144
144
# # streamlined hashing for smallish rational types ##
0 commit comments