News for hackers. Stuff that matters.
Re:Essential facts about floating point calculations by stinos on Monday July 06, 2015 @05:56AM (#9837924)
but in this case it was to test for near-zero values so absolute error comparison is good enough

Unless you are working with small numbers? Suppose you are dividing 1e-30 by 1e-30 than the result should still be 1 so if you return 0 when the second argument is < 1e-6 then you're screwed.

I think boost's close_at_tolerance does what your macro tries to do; basically you say 'here's two numbers, check if their values differ no more than x% of their value' With the advantage that it is not a macro and guards against overflow etc: http://www.boost.org/doc/libs/1_37_0/boost/test/floating_poi....

Re:Essential facts about floating point calculations by exDM69 on Monday July 06, 2015 @06:10AM (#9837982)
> Unless you are working with small numbers? Suppose you are dividing 1e-30 by 1e-30 than the result should still be 1 so if you return 0 when the second argument is < 1e-6 then you're screwed.

A very good point which I didn't think of! Obviously the 1e-6 figure is specific to the application.

How should one avoid division by zero then? You can't figure out the relative error without a division, can you? For normal comparisons, using a relative error is the way to go but the zero case is different.

On the other hand, using quantities of magnitudes in 1e-30 is already using half the exponent, a change of units may be due here.

Re:Essential facts about floating point calculations by stinos on Monday July 06, 2015 @08:05AM (#9838456)
How should one avoid division by zero then?

Good question and in this case I really can't tell, it depends on the problem domain (i.e. is your normal data set numbers greater than 1 or rather smaller then 1e-100) and I'm not sure if is possible (in a feasible way) to write one generic function which works for all cases.