From 5c464e979f4dd3c3669dd249f719f1bd8a9ceb2c Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Mon, 5 Nov 2018 22:24:55 +0100 Subject: [PATCH] Make median! type stable for small float types (#29902) Fixed #29900 --- stdlib/Statistics/src/Statistics.jl | 2 +- stdlib/Statistics/test/runtests.jl | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/stdlib/Statistics/src/Statistics.jl b/stdlib/Statistics/src/Statistics.jl index c1c0c37640fd1..efb518f82625f 100644 --- a/stdlib/Statistics/src/Statistics.jl +++ b/stdlib/Statistics/src/Statistics.jl @@ -694,7 +694,7 @@ Like [`median`](@ref), but may overwrite the input vector. function median!(v::AbstractVector) isempty(v) && throw(ArgumentError("median of an empty array is undefined, $(repr(v))")) eltype(v)>:Missing && any(ismissing, v) && return missing - (eltype(v)<:AbstractFloat || eltype(v)>:AbstractFloat) && any(isnan, v) && return NaN + (eltype(v)<:AbstractFloat || eltype(v)>:AbstractFloat) && any(isnan, v) && return convert(eltype(v), NaN) inds = axes(v, 1) n = length(inds) mid = div(first(inds)+last(inds),2) diff --git a/stdlib/Statistics/test/runtests.jl b/stdlib/Statistics/test/runtests.jl index 6c26efd12925f..a124e700e35c4 100644 --- a/stdlib/Statistics/test/runtests.jl +++ b/stdlib/Statistics/test/runtests.jl @@ -57,6 +57,11 @@ end @test median!([1 2; 3 4]) == 2.5 @test invoke(median, Tuple{AbstractVector}, 1:10) == median(1:10) == 5.5 + + @test @inferred(median(Float16[1, 2, NaN])) === Float16(NaN) + @test @inferred(median(Float16[1, 2, 3])) === Float16(2) + @test @inferred(median(Float32[1, 2, NaN])) === NaN32 + @test @inferred(median(Float32[1, 2, 3])) === 2.0f0 end @testset "mean" begin