Float.round - should it be round-to-even

O

OliverMarchand

I am suggesting to change the Float.round function to use the
well-known round-to-even method in case of a tie, i.e. x.5, where the
distance to ceil and floor is equal.

round currently uses a round-away-from-zero strategy. This strategy
will introduce a bias when applied to many numbers, i.e. the average of
the rounded numbers will be higher than that of original numbers. This
effect does make a considerable difference, despite the singular nature
of the x.5 values. Consider e.g. the computation of the median of an
array with floats.

Here is a quick hack ruby implementation which adds round to even to
the Float class:

class Float

def signum
if self>=0.0; 1.0
else; -1.0
end
end

def roundte
s = self.signum
f = self*s

rp = f-f.floor
rm = f.ceil-f
if rp>rm
return (s*f.ceil).to_i
elsif rp<rm
return (s*f.floor).to_i
else
if (f.ceil%2)==0; return (s*f.ceil).to_i
else; return (s*f.floor).to_i
end
end
end

end

Round is implemented in float.c. Anyone interested in me implementing
round-to-even there?

tschuess,
Oliver
 
S

Stefano Taschini

Consider e.g. the computation of the median of an array with floats.

If your input data are floats and your result is also a float, may ask
you why you want to round them?

If you are actually thinking of rounding errors, i.e., the fact that
(1/2.0) + (1/3.0) != 5/6.0, well, they are independent of Float#round.

By the way, the median [1] is hardly biased by rounding errors. It's
the mean that is sensitive to that.

Ciao,
Stefano

[1] http://mathworld.wolfram.com/StatisticalMedian.html
 
O

OliverMarchand

Stefano, thanks for your input!
If your input data are floats and your result is also a float, may ask
you why you want to round them?

I used a (as I saw now) non-standard definition of the median, in ruby
say:

median =
array_with_floats.sort[(array_with_floats.length/2).to_f.round]

where the median is ensured to be an element of the list of values.

With the standard definition from [1], there is no rounding effect -
yes.

I have no formal analysis of this at hand or cannot quickly derive one,
but I am pretty sure that using round-to-even for my median is
statistically "better" in a useful sense then using
round-away-from-zero.

cheers,
Oliver
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,262
Messages
2,571,056
Members
48,769
Latest member
Clifft

Latest Threads

Top