Ваш mapreduce
- это map
пинг каждого элемента на 1
или 0
. Вместо этого вы хотите сопоставить каждый элемент либо с p
, либо с 0
.
julia> N = 1000000;
julia> samples = randn(1000000);
julia> mapreduce(p -> p < 0.5 ? 1 : 0, +, samples) / N
0.690901
julia> mapreduce(p -> p < 0.5 ? p : -0.0, +, samples) / N
-0.35058272143615
julia> sum(filter(x-> x<0.5, samples))/N
-0.35058272143615005
Они могут по-прежнему видеть очень небольшую разницу (в данном случае это всего лишь 1 последняя единица -place), потому что результаты будут зависеть от порядка суммирования.