On Monday, July 18, 2016 at 3:45:26 PM UTC+5:30, Chris Angelico wrote: > On Mon, Jul 18, 2016 at 8:00 PM, Marko Rauhamaa wrote: > > Python programmers (among others) frequently run into issues with > > surprising results in floating-point arithmetics. For better or worse, > > Scheme has tried to abstract the concept. You don't need to explain the > > ideas of IEEE 64-bit floating-point numbers or tie the hands of the > > implementation. Instead, what you have is "reliable" arithmetics and > > "best-effort" arithmetics, a bit like TCP is "reliable" and UDP is > > "best-effort". > > The problem with that is that failing to explain IEEE floating point > and just calling it "inexact" scares people off unnecessarily. I've > seen a lot of very intelligent people who think that you should never > compare floats with the == operator, because floats randomly introduce > "inaccuracy". And then you get these sorts of functions: > > EPSILON = 0.000001 # Adjust to control numeric accuracy > def is_equal(f1, f2, epsilon=EPSILON): > if abs(f1) > abs(f2): > f1, f2 = f2, f1 > return abs(f2-f1) < f1*epsilon > > and interminable debates about how to pick an epsilon, whether it > should be relative to the smaller value (as here) or the larger (use > f2 instead), or maybe should be an absolute value, or maybe it should > be relative to the largest/smallest value that was ever involved in > the calculation, or........ >
I dont know what point you are trying to make Here is behavior. Should one use == ?? Python 2.7.11+ (default, Apr 17 2016, 14:00:29) [GCC 5.3.1 20160413] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> .1+.1+.1 == .3 False EPSILON = 0.000001 # Adjust to control numeric accuracy def is_equal(f1, f2, epsilon=EPSILON): if abs(f1) > abs(f2): f1, f2 = f2, f1 return abs(f2-f1) < f1*epsilon >>> ... ... ... ... >>> is_equal(.1+.1+.1, .3) True >>> -- https://mail.python.org/mailman/listinfo/python-list