@Avi: Whether this is a safe implementation depends in part on whether you want to say that 0.00002 == 0.000029 because they differ by less than 1.0e-5, even though they differ by 45%. Applying your philosophical boilerplate, you have to use some intelligence even in this type of thing.
Dave On Jan 7, 12:51 pm, Avi Dullu <[email protected]> wrote: > Thanx for the precise information. > > I was coming from a perspective of safe implementation, when dealing with > variables, you might not always know whether the values to be compared will > fall under the exact floating point representation, so the safe way to go > might always be to use the < 1.0e-5 method or go with library functions. You > see any problem with this too ? > > Programmers should realize their critical importance and responsibility in a > world gone digital. They are in many ways similar to the priests and monks > of Europe's Dark Ages; they are the only ones with the training and insight > to read and interpret the "scripture" of this age. > > > > On Fri, Jan 7, 2011 at 4:15 AM, Dave <[email protected]> wrote: > > I don't think your example with == would ever fail. According to the > > IEEE floating point standard, integers within the dynamic range of the > > number type must be represented exactly and must compare as equal. > > > Furthermore, the four basic operations on integers within the dynamic > > range of the floating point number type that have integer results > > within that dynamic range must be exact. Thus, 25.0 - 5.0, 13.0 + 7.0, > > 4.0 * 5.0, and 60.0 / 3.0 all must equal 20.0 exactly. > > > Where you run into trouble is when the numbers in question cannot be > > represented exactly in the finite precision floating point format -- > > something like this: > > > double d1 = 6.1; > > double d2 = 11.6; > > double d3 = 17.7; > > > assert(d1 + d2 == d3); // might fail, and Wrong way to do it !! > > > And your "correct and recommended way" is missing an absolute value: > > > assert(abs(d1 + d2 - d3) < 1.0e-5); // given you assume precision of > > 1e-5 is the correct and recommended way. > > > Dave > > > On Jan 6, 4:19 pm, Avi Dullu <[email protected]> wrote: > > > Just to mention, floating point numbers r always compared *for equality* > > > like > > > > double d1 = 90.0; > > > double d2 = 90.0; > > > > assert(d1 == d2); // might fail, and Wrong way to do !! > > > > assert(d1 - d2 < 1e-5); // given u assume precision of 1e-5, is the > > correct > > > and recommended way. > > > > Programmers should realize their critical importance and responsibility > > in a > > > world gone digital. They are in many ways similar to the priests and > > monks > > > of Europe's Dark Ages; they are the only ones with the training and > > insight > > > to read and interpret the "scripture" of this age. > > > > On Fri, Jan 7, 2011 at 1:47 AM, juver++ <[email protected]> wrote: > > > > Numbers without fractional parts are represented exactly (in a range > > > > supported by double). > > > > > -- > > > > You received this message because you are subscribed to the Google > > Groups > > > > "Algorithm Geeks" group. > > > > To post to this group, send email to [email protected]. > > > > To unsubscribe from this group, send email to > > > > [email protected]<algogeeks%2bunsubscr...@googlegroups.com> > > <algogeeks%2bunsubscr...@googlegroups.com> > > > > . > > > > For more options, visit this group at > > > >http://groups.google.com/group/algogeeks?hl=en.-Hide quoted text - > > > > - Show quoted text - > > > -- > > You received this message because you are subscribed to the Google Groups > > "Algorithm Geeks" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]<algogeeks%2bunsubscr...@googlegroups.com> > > . > > For more options, visit this group at > >http://groups.google.com/group/algogeeks?hl=en.- Hide quoted text - > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.
