2
2
# numeric types.
3
3
struct LazyFloat64 <: AbstractFloat
4
4
value:: Float64
5
+
6
+ LazyFloat64 (x:: AbstractFloat ) = new (convert (Float64, x))
5
7
end
6
8
7
- LazyFloat64 (x:: LazyFloat64 ) = x
8
- LazyFloat64 (x:: Number ) = LazyFloat64 (convert (Float64, x))
9
- float (x:: LazyFloat64 ) = x. value
9
+ Base. float (x:: LazyFloat64 ) = x. value
10
10
11
11
Base. convert (:: Type{LazyFloat64} , x:: LazyFloat64 ) = x
12
12
Base. convert (:: Type{LazyFloat64} , x:: FixedRational ) = LazyFloat64 (convert (Float64, x))
@@ -15,8 +15,6 @@ Base.convert(::Type{T}, x::LazyFloat64) where {T<:Number} = convert(T, float(x))
15
15
Base. promote_rule (:: Type{LazyFloat64} , :: Type{T} ) where {T<: AbstractFloat } = T
16
16
Base. promote_rule (:: Type{LazyFloat64} , :: Type{T} ) where {T} = promote_type (Float64, T)
17
17
18
- (:: Type{T} )(x:: LazyFloat64 ) where {T<: Number } = T (float (x))
19
-
20
18
Base. show (io:: IO , x:: LazyFloat64 ) = print (io, float (x))
21
19
22
20
Base.:+ (a:: LazyFloat64 , b:: LazyFloat64 ) = LazyFloat64 (float (a) + float (b))
@@ -31,3 +29,8 @@ Base.:^(a::LazyFloat64, b::LazyFloat64) = LazyFloat64(float(a) ^ float(b))
31
29
Base. sqrt (a:: LazyFloat64 ) = LazyFloat64 (sqrt (float (a)))
32
30
Base. cbrt (a:: LazyFloat64 ) = LazyFloat64 (cbrt (float (a)))
33
31
Base. eps (:: Type{LazyFloat64} ) = eps (Float64)
32
+
33
+ # Ambiguities:
34
+ for T in (:(Rational{<: Any }), :(Base. TwicePrecision), :AbstractChar , :Complex , :Number )
35
+ @eval LazyFloat64 (x:: $T ) = LazyFloat64 (float (x))
36
+ end
0 commit comments