Question of mean
1 view (last 30 days)
Show older comments
When I write a program about consumption (C) with 10^5 trajectories, I want to calculate the expectation of them with the command mean(C(:,j)). However, at j=1, all the C are equal to 0.86, but the mean(C(:,1))=0.859999999999891. Would anyone tell me why it happens and how to correct it please? Thank you.
0 Comments
Accepted Answer
Tom Lane
on 21 May 2012
As Oleg and Titus imply, one idea is to change the test so that it allows for things that differ by a small amount to be treated as roughly equal. Another thing that sometimes works is to refine your answer by another application of mean. This works in some cases but doesn't change the fundamental fact that two theoretically identical things may be slightly different when represented by double precision on a computer. Anyway, here's what I had in mind:
>> x = repmat(0.86,1e5,1);
>> fprintf('%25.18g\n',x(1))
0.85999999999999999
>> m = mean(x); fprintf('%25.18g\n',m)
0.86000000000030574
>> m = m + mean(x-m); fprintf('%25.18g\n',m)
0.85999999999999999
0 Comments
More Answers (1)
Titus Edelhofer
on 21 May 2012
Hi,
0.86 is not exactly representable in computers double precision representation:
fprintf('%.20f\n', 0.86)
0.85999999999999999000
Titus
3 Comments
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!