returning inf will still accumulate into nans, as inf*0 == inf - inf == nan
returning inf will still accumulate into nans, as inf*0 == inf - inf == nan