@@ -452,18 +452,22 @@ julia> prod(1:20)
452452prod (a) = mapreduce (identity, mul_prod, a)
453453
454454# # maximum & minimum
455- function _fast (:: typeof (max),x,y)
455+ _fast (:: typeof (min),x,y) = min (x,y)
456+ _fast (:: typeof (max),x,y) = max (x,y)
457+ function _fast (:: typeof (max), x:: AbstractFloat , y:: AbstractFloat )
456458 ifelse (isnan (x),
457459 x,
458460 ifelse (x > y, x, y))
459461end
460462
461- function _fast (:: typeof (min),x,y )
463+ function _fast (:: typeof (min),x:: AbstractFloat , y :: AbstractFloat )
462464 ifelse (isnan (x),
463465 x,
464466 ifelse (x < y, x, y))
465467end
466468
469+ _isnan (x) = false
470+ _isnan (x:: Real ) = isnan (x)
467471isbadzero (:: typeof (max), x:: AbstractFloat ) = (x == zero (x)) & signbit (x)
468472isbadzero (:: typeof (min), x:: AbstractFloat ) = (x == zero (x)) & ! signbit (x)
469473isbadzero (op, x) = false
@@ -479,10 +483,10 @@ function mapreduce_impl(f, op::Union{typeof(max), typeof(min)},
479483 start = first
480484 stop = start + chunk_len - 4
481485 while stop <= last
482- isnan (v1) && return v1
483- isnan (v2) && return v2
484- isnan (v3) && return v3
485- isnan (v4) && return v4
486+ _isnan (v1) && return v1
487+ _isnan (v2) && return v2
488+ _isnan (v3) && return v3
489+ _isnan (v4) && return v4
486490 @inbounds for i in start: 4 : stop
487491 v1 = _fast (op, v1, f (A[i+ 1 ]))
488492 v2 = _fast (op, v2, f (A[i+ 2 ]))
0 commit comments