Skip to content

Commit

Permalink
promote(Int,Float32)=Float32 to fix #1531
Browse files Browse the repository at this point in the history
  • Loading branch information
JeffBezanson committed Nov 29, 2012
1 parent 82a8520 commit 3708e1c
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions base/float.jl
Original file line number Diff line number Diff line change
Expand Up @@ -81,23 +81,23 @@ promote_rule(::Type{Float64}, ::Type{Float32}) = Float64

promote_rule(::Type{Float32}, ::Type{Int8} ) = Float32
promote_rule(::Type{Float32}, ::Type{Int16}) = Float32
promote_rule(::Type{Float32}, ::Type{Int32}) = Float64
promote_rule(::Type{Float32}, ::Type{Int64}) = Float64 # TODO: should be Float80
promote_rule(::Type{Float32}, ::Type{Int32}) = Float32
promote_rule(::Type{Float32}, ::Type{Int64}) = Float32

promote_rule(::Type{Float64}, ::Type{Int8} ) = Float64
promote_rule(::Type{Float64}, ::Type{Int16}) = Float64
promote_rule(::Type{Float64}, ::Type{Int32}) = Float64
promote_rule(::Type{Float64}, ::Type{Int64}) = Float64 # TODO: should be Float80
promote_rule(::Type{Float64}, ::Type{Int64}) = Float64

promote_rule(::Type{Float32}, ::Type{Uint8} ) = Float32
promote_rule(::Type{Float32}, ::Type{Uint16}) = Float32
promote_rule(::Type{Float32}, ::Type{Uint32}) = Float64
promote_rule(::Type{Float32}, ::Type{Uint64}) = Float64 # TODO: should be Float80
promote_rule(::Type{Float32}, ::Type{Uint32}) = Float32
promote_rule(::Type{Float32}, ::Type{Uint64}) = Float32

promote_rule(::Type{Float64}, ::Type{Uint8} ) = Float64
promote_rule(::Type{Float64}, ::Type{Uint16}) = Float64
promote_rule(::Type{Float64}, ::Type{Uint32}) = Float64
promote_rule(::Type{Float64}, ::Type{Uint64}) = Float64 # TODO: should be Float80
promote_rule(::Type{Float64}, ::Type{Uint64}) = Float64

promote_rule(::Type{Float32}, ::Type{Char}) = Float32
promote_rule(::Type{Float64}, ::Type{Char}) = Float64
Expand Down Expand Up @@ -175,6 +175,15 @@ isless (a::FloatingPoint, b::Integer) = (a<b) | isless(a,float(b))
<=(x::Int64 , y::Float32) = lesif64(unbox(Int64,x),unbox(Float64,float64(y)))
<=(x::Uint64 , y::Float32) = leuif64(unbox(Uint64,x),unbox(Float64,float64(y)))

==(x::Float32, y::Union(Int32,Int64,Uint32,Uint64)) = float64(x)==float64(y)
==(x::Union(Int32,Int64,Uint32,Uint64), y::Float32) = float64(x)==float64(y)

<(x::Float32, y::Union(Int32,Int64,Uint32,Uint64)) = float64(x)<float64(y)
<(x::Union(Int32,Int64,Uint32,Uint64), y::Float32) = float64(x)<float64(y)

<=(x::Float32, y::Union(Int32,Int64,Uint32,Uint64)) = float64(x)<=float64(y)
<=(x::Union(Int32,Int64,Uint32,Uint64), y::Float32) = float64(x)<=float64(y)

## floating point traits ##

const Inf32 = box(Float32,unbox(Uint32,0x7f800000))
Expand Down

0 comments on commit 3708e1c

Please sign in to comment.