|
Scott Klement wrote: > > Someone posted this question on the iSeries Network's RPG forum, and it > stumped me, so I thought I'd bring it here and see what you guys think. > > I'm running the following code. The two numbers, VAR1 and VAR2 should > have the same results, shouldn't they? > > d VAR2 S 30p 0 > d VAR1 s 30p 0 > > c eval VAR2 = (16**15) > c VAR2 dsply > > c eval VAR1 = (16**14) > c eval VAR1 = VAR1 * 16 > c dsply VAR1 > > c eval *inlr = *on > > The result of running this program looks like this: > > DSPLY 1152921504606846980 > DSPLY 1152921504606846976 > > So, my question is, what's going on here? And, why would there be a > difference of 4?! > > As far as I can tell, this only happens on V5R2. Can anyone confirm that > it doesn't happen on older releases? > Scott: I haven't been able to monitor this list lately since this week I've been downtown waiting to be selected for jury duty. But today they let us out a bit early. What's happening here? It's simple, really. The exponentiation operator returns a float numeric value. When you're dealing with double precision IEEE float numeric, you're limited to about 16 digits of precision. Any digits past the 16th or 17th cannot be trusted. Period. (Note in the values listed that the difference shows up in the 18th digit and beyond.) Cheers! Hans
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.