@@ -436,21 +436,15 @@ unsafe_trunc(::Type{UInt128}, x::Float16) = unsafe_trunc(UInt128, Float32(x))
436436unsafe_trunc (:: Type{Int128} , x:: Float16 ) = unsafe_trunc (Int128, Float32 (x))
437437
438438# matches convert methods
439- # also determines floor, ceil, round
440- trunc (:: Type{Signed} , x:: IEEEFloat ) = trunc (Int,x)
441- trunc (:: Type{Unsigned} , x:: IEEEFloat ) = trunc (UInt,x)
442- trunc (:: Type{Integer} , x:: IEEEFloat ) = trunc (Int,x)
443-
444- # Bool
445- trunc (:: Type{Bool} , x:: AbstractFloat ) = (- 1 < x < 2 ) ? 1 <= x : throw (InexactError (:trunc , Bool, x))
446- floor (:: Type{Bool} , x:: AbstractFloat ) = (0 <= x < 2 ) ? 1 <= x : throw (InexactError (:floor , Bool, x))
447- ceil (:: Type{Bool} , x:: AbstractFloat ) = (- 1 < x <= 1 ) ? 0 < x : throw (InexactError (:ceil , Bool, x))
448- round (:: Type{Bool} , x:: AbstractFloat ) = (- 0.5 <= x < 1.5 ) ? 0.5 < x : throw (InexactError (:round , Bool, x))
449-
450- round (x:: IEEEFloat , r:: RoundingMode{:ToZero} ) = trunc_llvm (x)
451- round (x:: IEEEFloat , r:: RoundingMode{:Down} ) = floor_llvm (x)
452- round (x:: IEEEFloat , r:: RoundingMode{:Up} ) = ceil_llvm (x)
453- round (x:: IEEEFloat , r:: RoundingMode{:Nearest} ) = rint_llvm (x)
439+ # also determines trunc, floor, ceil
440+ round (:: Type{Signed} , x:: IEEEFloat , r:: RoundingMode ) = round (Int, x, r)
441+ round (:: Type{Unsigned} , x:: IEEEFloat , r:: RoundingMode ) = round (UInt, x, r)
442+ round (:: Type{Integer} , x:: IEEEFloat , r:: RoundingMode ) = round (Int, x, r)
443+
444+ round (x:: IEEEFloat , :: RoundingMode{:ToZero} ) = trunc_llvm (x)
445+ round (x:: IEEEFloat , :: RoundingMode{:Down} ) = floor_llvm (x)
446+ round (x:: IEEEFloat , :: RoundingMode{:Up} ) = ceil_llvm (x)
447+ round (x:: IEEEFloat , :: RoundingMode{:Nearest} ) = rint_llvm (x)
454448
455449# # floating point promotions ##
456450promote_rule (:: Type{Float32} , :: Type{Float16} ) = Float32
@@ -931,11 +925,11 @@ for Ti in (Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UIn
931925 # directly. `Tf(typemax(Ti))+1` is either always exactly representable, or
932926 # rounded to `Inf` (e.g. when `Ti==UInt128 && Tf==Float32`).
933927 @eval begin
934- function trunc (:: Type{$Ti} ,x:: $Tf )
928+ function round (:: Type{$Ti} ,x:: $Tf , :: RoundingMode{:ToZero} )
935929 if $ (Tf (typemin (Ti))- one (Tf)) < x < $ (Tf (typemax (Ti))+ one (Tf))
936930 return unsafe_trunc ($ Ti,x)
937931 else
938- throw (InexactError (:trunc , $ Ti, x))
932+ throw (InexactError (:round , $ Ti, x, RoundToZero ))
939933 end
940934 end
941935 function (:: Type{$Ti} )(x:: $Tf )
@@ -955,11 +949,11 @@ for Ti in (Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UIn
955949 # be rounded up. This assumes that `Tf(typemin(Ti)) > -Inf`, which is true for
956950 # these types, but not for `Float16` or larger integer types.
957951 @eval begin
958- function trunc (:: Type{$Ti} ,x:: $Tf )
952+ function round (:: Type{$Ti} ,x:: $Tf , :: RoundingMode{:ToZero} )
959953 if $ (Tf (typemin (Ti))) <= x < $ (Tf (typemax (Ti)))
960954 return unsafe_trunc ($ Ti,x)
961955 else
962- throw (InexactError (:trunc , $ Ti, x))
956+ throw (InexactError (:round , $ Ti, x, RoundToZero ))
963957 end
964958 end
965959 function (:: Type{$Ti} )(x:: $Tf )
0 commit comments