1. Rob's going to hate me... (Remainder bug)
- Posted by Urz <Urzumph at HotPOP.com> Nov 07, 2003
- 683 views
Heh, twice in a week, lol ? remainder(100,0.01) gives 0.01 and I am sure that's not supposed to happen This is reproducable with all numbers <= 0.2 for some reason, all numbers > .2 work as they should. Also, this only affects numbers which are cleanly divisable. ? remainder(100.001,0.01) returns 0.001 as it should Running Euphoria 2.4
2. Re: Rob's going to hate me... (Remainder bug)
- Posted by EUPHORiCK <euphoric at cklester.com> Nov 07, 2003
- 634 views
Urzumph wrote: > Heh, twice in a week, lol > ? remainder(100,0.01) > gives 0.01 and I am sure that's not supposed to happen > This is reproducable with all numbers <= 0.2 > for some reason, all numbers > .2 work as they should. > Also, this only affects numbers which are cleanly divisable. > ? remainder(100.001,0.01) returns 0.001 as it should > > Running Euphoria 2.4 Au contraire. He's going to love you for helping make EUPHORIA more robust. ;)
3. Re: Rob's going to hate me... (Remainder bug)
- Posted by Robert Craig <rds at RapidEuphoria.com> Nov 07, 2003
- 628 views
Urzumph wrote: > Heh, twice in a week, lol > ? remainder(100,0.01) > gives 0.01 and I am sure that's not supposed to happen > This is reproducable with all numbers <= 0.2 > for some reason, all numbers > .2 work as they should. > Also, this only affects numbers which are cleanly divisable. > ? remainder(100.001,0.01) returns 0.001 as it should Don't lol too hard. Your first one wasn't a bug, and neither is this one. This remainder issue came up on the mailing list a few years ago. It's basically an incarnation of the old "0.1 (0.01 etc.) can't be represented exactly on Intel hardware" problem. Once or twice every year someone on this list is shocked to find that floating-point calculations aren't perfectly exact, and the error can sometimes be magnified into an obviously incorrect answer... http://www.listfilter.com/cgi-bin/esearch.exu?fromMonth=2&fromYear=5&toMonth=2&toYear=5&postedBy=rds&keywords=remainder (the URL might wrap - be careful) Regards, Rob Craig Rapid Deployment Software http://www.RapidEuphoria.com
4. Re: Rob's going to hate me... (Remainder bug)
- Posted by kbochert at copper.net Nov 07, 2003
- 631 views
On 7 Nov 2003 at 1:30, Robert Craig wrote: > > > Urzumph wrote: > > Heh, twice in a week, lol > > ? remainder(100,0.01) > > gives 0.01 and I am sure that's not supposed to happen > > This is reproducable with all numbers <= 0.2 > > for some reason, all numbers > .2 work as they should. > > Also, this only affects numbers which are cleanly divisable. > > ? remainder(100.001,0.01) returns 0.001 as it should > > Don't lol too hard. > Your first one wasn't a bug, and neither is this one. > > This remainder issue came up on the mailing list > a few years ago. It's basically an incarnation of the old > "0.1 (0.01 etc.) can't be represented exactly on > Intel hardware" problem. Once or twice every year > someone on this list is shocked to find that > floating-point calculations aren't perfectly exact, > and the error can sometimes be magnified into an > obviously incorrect answer... > > > http://www.listfilter.com/cgi-bin/esearch.exu?fromMonth=2&fromYear=5&toMonth=2&toYear=5&postedBy=rds&keywords=remainder > > (the URL might wrap - be careful) > > Regards, > Rob Craig > Rapid Deployment Software > http://www.RapidEuphoria.com > >From a number of sources: "The fmod() function returns the value x - i * y, for some integer i, such that, if y is non-zero, the result has the same sign as x and magnitude less than the magnitude of y. in Dremainder(): double x, y; if (b->dbl < 1) { // fmod() seems to sometimes goof this! x = a->dbl < 0? -a->dbl: a->dbl; y = b->dbl < 0? -b->dbl: b->dbl; x = x - floor(x / y) * y; if (a->dbl < 0) // sign matches a return (object)NewDouble(-x); return (object)NewDouble(x); } Works for the (100, .01) case (and others I have tried). This leads me to believe that it is a bug in the implementation of fmod() (In Intel's hardware?). Maybe remainders of fractional divisors are seldom done?? Can also be done in Eu code, of course. Ktb Note that the above code is invoked for both fractional and negative divisors -- both work fine.
5. Re: Rob's going to hate me... (Remainder bug)
- Posted by Robert Craig <rds at RapidEuphoria.com> Nov 07, 2003
- 593 views
kbochert at copper.net wrote: >>From a number of sources: > "The fmod() function returns the value x - i * y, for some > integer i, such that, if y is non-zero, the result has the > same sign as x and magnitude less than the > magnitude of y. > > > in Dremainder(): > > double x, y; > if (b->dbl < 1) { // fmod() seems to sometimes goof this! > x = a->dbl < 0? -a->dbl: a->dbl; > y = b->dbl < 0? -b->dbl: b->dbl; > x = x - floor(x / y) * y; > if (a->dbl < 0) // sign matches a > return (object)NewDouble(-x); > return (object)NewDouble(x); > } > > Works for the (100, .01) case (and others I have tried). > This leads me to believe that it is a bug in the implementation > of fmod() (In Intel's hardware?). I doubt it. > Maybe remainders of fractional divisors are seldom done?? > > Can also be done in Eu code, of course. > > Ktb > > Note that the above code is invoked for both fractional and negative > divisors -- both work fine. I'm sure, by changing the way something is calculated, you can often eliminate anomalies for some cases. But you can't eliminate the fundamental mathematical problem with finite-precision floating-point. Because it only uses a finite number of digits, Intel (and most other) floating-point hardware can't represent all numbers with perfect accuracy. As humans who use the decimal system we are surprised to find that numbers like .1 .01 etc. can't be represented perfectly in Intel's binary floating-point system. Instead, the hardware uses something like .01 +/- epsilon to represent .01, where epsilon is a very tiny positive number. In remainder(100, .01), suppose the hardware uses .01 + epsilon. To calculate the remainder after dividing 100 by (.01 + epsilon), we see that 99 * (.01 + epsilon) = .99 + 99 * epsilon which is as high as we can get before we exceed 100. So we will say: 100 = 99 * (.01 + epsilon) with a remainder of .01 - 99 * epsilon When we print this remainder to (say) 10 digits, we will see: 0.01, a far cry from the 0 we expected. If on the other hand, the machine uses .01 - epsilon, We will have: 100 = 100 * (.01 - epsilon) with a remainder of 100 * epsilon When we print this remainder, we will see 0 as we expected. I still like the simpler example: if 1.0 != .1 + .1 + .1 + .1 + .1 + .1 + .1 + .1 + .1 + .1 then puts(1, "Not accurate!!!\n") end if Regards, Rob Craig Rapid Deployment Software http://www.RapidEuphoria.com
6. Re: Rob's going to hate me... (Remainder bug)
- Posted by "Derek Parnell" <ddparnell at bigpond.com> Nov 07, 2003
- 585 views
----- Original Message ----- From: "Urzumph" <Urzumph at HotPOP.com> To: "Mailing List" <EUforum at topica.com> Subject: Rob's going to hate me... (Remainder bug) > > > Heh, twice in a week, lol > ? remainder(100,0.01) > gives 0.01 and I am sure that's not supposed to happen > This is reproducable with all numbers <= 0.2 > for some reason, all numbers > .2 work as they should. > Also, this only affects numbers which are cleanly divisable. > ? remainder(100.001,0.01) returns 0.001 as it should > > Running Euphoria 2.4 > Try this then... function rmder(atom a, atom b) atom x x = a / b return (x - floor(x)) * b end function ? remainder(100, 0.01) ? rmder(100, 0.01) ? remainder(100, 0.2) ? rmder(100, 0.2) ? remainder(100, 1.01) ? rmder(100, 1.01)
7. Re: Rob's going to hate me... (Remainder bug)
- Posted by kbochert at copper.net Nov 07, 2003
- 607 views
On 7 Nov 2003 at 15:11, Robert Craig wrote: > > > kbochert at copper.net wrote: > >>From a number of sources: > > "The fmod() function returns the value x - i * y, for some > > integer i, such that, if y is non-zero, the result has the > > same sign as x and magnitude less than the > > magnitude of y. > > > > > > in Dremainder(): > > > > double x, y; > > if (b->dbl < 1) { // fmod() seems to sometimes goof this! > > x = a->dbl < 0? -a->dbl: a->dbl; > > y = b->dbl < 0? -b->dbl: b->dbl; > > x = x - floor(x / y) * y; > > if (a->dbl < 0) // sign matches a > > return (object)NewDouble(-x); > > return (object)NewDouble(x); > > } > > > > Works for the (100, .01) case (and others I have tried). > > This leads me to believe that it is a bug in the implementation > > of fmod() (In Intel's hardware?). > > I doubt it. > > > Maybe remainders of fractional divisors are seldom done?? > > > > Can also be done in Eu code, of course. > > > > Ktb > > > > Note that the above code is invoked for both fractional and negative > > divisors -- both work fine. > > I'm sure, by changing the way something is calculated, > you can often eliminate anomalies for some cases. > But you can't eliminate the fundamental mathematical > problem with finite-precision floating-point. > > Because it only uses a finite number of digits, > Intel (and most other) floating-point hardware can't > represent all numbers with perfect accuracy. > As humans who use the decimal system we are > surprised to find that numbers like .1 .01 etc. > can't be represented perfectly in Intel's > binary floating-point system. > Instead, the hardware uses something like .01 +/- epsilon to > represent .01, where epsilon is a very tiny positive number. > > In remainder(100, .01), > suppose the hardware uses .01 + epsilon. > To calculate the remainder after dividing 100 by > (.01 + epsilon), we see that > 99 * (.01 + epsilon) = .99 + 99 * epsilon > which is as high as we can get before we exceed 100. > So we will say: > 100 = 99 * (.01 + epsilon) > with a remainder of .01 - 99 * epsilon > When we print this remainder to (say) 10 digits, > we will see: 0.01, a far cry from the 0 we expected. > > If on the other hand, the machine uses .01 - epsilon, > We will have: > 100 = 100 * (.01 - epsilon) > with a remainder of 100 * epsilon > When we print this remainder, we will see 0 as we expected. > > I still like the simpler example: > > if 1.0 != .1 + .1 + .1 + .1 + .1 + > .1 + .1 + .1 + .1 + .1 then > puts(1, "Not accurate!!!\n") > end if > > Regards, > Rob Craig > Rapid Deployment Software > http://www.RapidEuphoria.com > It seems to me that given that fmod(a,b) is defined as returning a value which is less than b, failure to do so is not just inaccurate but a real bug. >From a Google search: http://www.boic.com/b1mnum.pdf. (dated Nov 3 2003 !!) QUOTE: Appendix Microsoft Modulo Bugs Over the years of testing of the Number Class, we've discovered nasty bugs in Microsoft's fmod() function, which you can easily confirm for yourself. For example, using the Windows 95 Calculator accessory (evidently built on the same fmod function) try this simple calculation: 5.5 mod 1.1 Instead of giving the correct result, which should be 0, it shows the result as 1.1. Similar errors are not hard to find, e.g. try 5.1 mod 1.7, 49 mod 9.8, 21.9 mod 7.3, and 36 mod 7.2. Interestingly, this problem occurs only with certain choices of values and the pattern of failures is not trivially discerned, but there are obviously many more cases. In fact we found it increasingly rare not to encounter such errors with more decimal places. We were unable to find any reference to this disturbing bug in the Microsoft Knowledge Base. Considering how much flack Intel took over an even more obscure arithmetic bug in its Pentium processor, one can only wonder how Microsoft ever got away with this one. Fortunately, the problem seems to have been quietly fixed in Windows 98, but that's not much consolation to those of us who expect our programs to work properly under Windows 95 and early versions of Windows NT 4.0. In any case, rest assured that the Base/1 Number Class computes the modulo function correctly under any version of Windows. The modulo bug described above seems to have been fixed in the latest operating systems and service packs from Microsoft. However, here's a new one we discovered in recent testing of the Number Class: d1 = 8853.41959899; d2 = 2951.13986633; fmod( d1, d2 ) returns the same value as that of d2 instead of returning zero. In this example, d1 is a perfect multiple of d2 (d1 = d2 * 3). We got this error on Windows NT Service Pack 5 and 6a and Windows 2000 server. For some versions, the bug did NOT appear in the calculator program, but using fmod() ALWAYS produces this bug. The Number Class properly returns the correct remainder of zero UNQUOTE Ktb
8. Re: Rob's going to hate me... (Remainder bug)
- Posted by kbochert at copper.net Nov 07, 2003
- 592 views
On 8 Nov 2003 at 8:10, Derek Parnell wrote: > > > ----- Original Message ----- > From: "Urzumph" <Urzumph at HotPOP.com> > To: "Mailing List" <EUforum at topica.com> > Subject: Rob's going to hate me... (Remainder bug) > > > > Heh, twice in a week, lol > > ? remainder(100,0.01) > > gives 0.01 and I am sure that's not supposed to happen > > This is reproducable with all numbers <= 0.2 > > for some reason, all numbers > .2 work as they should. > > Also, this only affects numbers which are cleanly divisable. > > ? remainder(100.001,0.01) returns 0.001 as it should > > > > Running Euphoria 2.4 > > > > Try this then... > > function rmder(atom a, atom b) > atom x > x = a / b > return (x - floor(x)) * b > end function > > > ? remainder(100, 0.01) > ? rmder(100, 0.01) > > ? remainder(100, 0.2) > ? rmder(100, 0.2) > > ? remainder(100, 1.01) > ? rmder(100, 1.01) > Yes, but don't forget about negative arguments. remainder, like fmod(), is defined to return a result of the same sign as its first argument. (took me about a dozen tries to get it right!) ktb
9. Re: Rob's going to hate me... (Remainder bug)
- Posted by Robert Craig <rds at RapidEuphoria.com> Nov 07, 2003
- 634 views
kbochert at copper.net wrote: > It seems to me that given that fmod(a,b) is defined as returning a value > which is less than b, failure to do so is not just inaccurate but a real bug. I'm sure it *does* return a value less than b. But when you print a result such as 0.01 - 99 * epsilon to 10 significant digits, like Euphoria does by default, you see: 0.01 >>From a Google search: > http://www.boic.com/b1mnum.pdf. (dated Nov 3 2003 !!) > > QUOTE: > Appendix > Microsoft Modulo Bugs > Over the years of testing of the Number Class, we've discovered nasty bugs in > Microsoft's fmod() > function, which you can easily confirm for yourself. For example, using the > Windows > 95 Calculator > accessory (evidently built on the same fmod function) try this simple > calculation: > 5.5 mod 1.1 > Instead of giving the correct result, which should be 0, > it shows the result as 1.1. > ... This person obviously is not aware of the pitfalls of binary, limited-precision floating-point. > We were unable to find any reference to this > disturbing bug in the > Microsoft Knowledge Base. Because it's not really a bug in the library. It's a limitation of the floating-point hardware. > ... For some versions, the bug did NOT appear in the calculator > program, but > using fmod() ALWAYS produces this bug. No doubt because the calculator program uses *decimal* floating-point, where numbers like 0.1, 0.01 etc. *can* be represented with perfect accuracy (but then lots of other numbers can't, so this is not a perfect solution either.) Regards, Rob Craig Rapid Deployment Software http://www.RapidEuphoria.com
10. Re: Rob's going to hate me... (Remainder bug)
- Posted by kbochert at copper.net Nov 08, 2003
- 621 views
On 7 Nov 2003 at 18:07, Robert Craig wrote: > > > kbochert at copper.net wrote: > > It seems to me that given that fmod(a,b) is defined as returning a value > > which is less than b, failure to do so is not just inaccurate but a real > > bug. > > I'm sure it *does* return a value less than b. > But when you print a result such as 0.01 - 99 * epsilon > to 10 significant digits, like Euphoria does by default, > you see: 0.01 > Yes it does. A value is calculated that looks like .00999... which rounds to .01 But note that even with a precise decimal (extending to infinity) the result is nearly as bad as it can be. (Given that it must be less than .01). Whats at fault is the algorithm, which can magnify small errors into disasters. Consider instead: rslt = X - floor( X/Y) * Y Slight inaccuracies in the subtraction or multiplication leave you with small inaccuracies in the result. A slight inaccuracy in the division can cause the floor function to return a value that is (exactly) one too small, which multiplied by Y gives a value that is Y too small, and subtracted from X gives a result that is exactly Y too large, a huge error just like we see now. For floor(X/Y) to produce this kind of step error requires that X/Y be very close to an integral value. So either X is a multiple of Y, in which case the result can be Y when it should be 0, or they are near values whose difference is close to the accuracy limits of a double (Like 111111111111 /111111111112, or some such) So: rslt = X - floor (X/Y) * Y if (rslt == Y) rslt = 0 The step error can still happen, but it is confined to more uncommon cases. > >>From a Google search: > > http://www.boic.com/b1mnum.pdf. (dated Nov 3 2003 !!) > > > > QUOTE: > > Appendix > > Microsoft Modulo Bugs > > Over the years of testing of the Number Class, we've discovered nasty bugs > > in > > Microsoft's fmod() > > function, which you can easily confirm for yourself. For example, using the > > Windows > > 95 Calculator > > accessory (evidently built on the same fmod function) try this simple > > calculation: > > 5.5 mod 1.1 > > Instead of giving the correct result, which should be 0, > > it shows the result as 1.1. > > ... > > This person obviously is not aware of the pitfalls of > binary, limited-precision floating-point. > > > We were unable to find any reference to this > > disturbing bug in the > > Microsoft Knowledge Base. > > Because it's not really a bug in the library. > It's a limitation of the floating-point hardware. > Exacerbated by a fragile algorithm. > > ... For some versions, the bug did NOT appear in the calculator > > program, but > > using fmod() ALWAYS produces this bug. > > No doubt because the calculator program uses > *decimal* floating-point, where numbers like 0.1, 0.01 etc. > *can* be represented with perfect accuracy (but then > lots of other numbers can't, so this is not a > perfect solution either.) > Would be good for checking the results of the binary math. KtB
11. Re: Rob's going to hate me... (Remainder bug)
- Posted by kbochert at copper.net Nov 08, 2003
- 627 views
On 7 Nov 2003 at 18:07, Robert Craig wrote: > > > kbochert at copper.net wrote: > > It seems to me that given that fmod(a,b) is defined as returning a value > > which is less than b, failure to do so is not just inaccurate but a real > > bug. > > I'm sure it *does* return a value less than b. > But when you print a result such as 0.01 - 99 * epsilon > to 10 significant digits, like Euphoria does by default, > you see: 0.01 > > >>From a Google search: > > http://www.boic.com/b1mnum.pdf. (dated Nov 3 2003 !!) > > > > QUOTE: > > Appendix > > Microsoft Modulo Bugs > > Over the years of testing of the Number Class, we've discovered nasty bugs > > in > > Microsoft's fmod() > > function, which you can easily confirm for yourself. For example, using the > > Windows > > 95 Calculator > > accessory (evidently built on the same fmod function) try this simple > > calculation: > > 5.5 mod 1.1 > > Instead of giving the correct result, which should be 0, > > it shows the result as 1.1. > > ... > > This person obviously is not aware of the pitfalls of > binary, limited-precision floating-point. > > > We were unable to find any reference to this > > disturbing bug in the > > Microsoft Knowledge Base. > > Because it's not really a bug in the library. > It's a limitation of the floating-point hardware. > > > ... For some versions, the bug did NOT appear in the calculator > > program, but > > using fmod() ALWAYS produces this bug. > > No doubt because the calculator program uses > *decimal* floating-point, where numbers like 0.1, 0.01 etc. > *can* be represented with perfect accuracy (but then > lots of other numbers can't, so this is not a > perfect solution either.) > > Regards, > Rob Craig > Rapid Deployment Software > http://www.RapidEuphoria.com > Update: I think you are right. Seems a pity though. Loss of accuracy is one thing but flat out wrong results from ordinary inputs is bothersome. Bach may add a default argument, the precision, and round the division internally KtB
12. Re: Rob's going to hate me... (Remainder bug)
- Posted by "Derek Parnell" <ddparnell at bigpond.com> Nov 08, 2003
- 618 views
----- Original Message ----- From: <kbochert at copper.net> To: <EUforum at topica.com> Subject: Re: Rob's going to hate me... (Remainder bug) > > > On 8 Nov 2003 at 8:10, Derek Parnell wrote: > > > > > ----- Original Message ----- > > From: "Urzumph" <Urzumph at HotPOP.com> > > To: "Mailing List" <EUforum at topica.com> > > Sent: Friday, November 07, 2003 11:19 AM > > Subject: Rob's going to hate me... (Remainder bug) > > > > > > > Heh, twice in a week, lol > > > ? remainder(100,0.01) > > > gives 0.01 and I am sure that's not supposed to happen > > > This is reproducable with all numbers <= 0.2 > > > for some reason, all numbers > .2 work as they should. > > > Also, this only affects numbers which are cleanly divisable. > > > ? remainder(100.001,0.01) returns 0.001 as it should > > > > > > Running Euphoria 2.4 > > > > > > > Try this then... > > > > function rmder(atom a, atom b) > > atom x > > x = a / b > > return (x - floor(x)) * b > > end function > > > > > > ? remainder(100, 0.01) > > ? rmder(100, 0.01) > > > > ? remainder(100, 0.2) > > ? rmder(100, 0.2) > > > > ? remainder(100, 1.01) > > ? rmder(100, 1.01) > > > Yes, but don't forget about negative arguments. > remainder, like fmod(), is defined to return a result of the same sign > as its first argument. > (took me about a dozen tries to get it right!) > ktb > Ok then, how about ... function rmder(atom a, atom b) atom x integer sign if a < 0 then sign = -1 a = -a else sign = 1 end if if b < 0 then b = -b end if x = a / b return ((x - floor(x)) * b) * sign end function
13. Re: Rob's going to hate me... (Remainder bug)
- Posted by Urz <Urzumph at HotPOP.com> Nov 08, 2003
- 596 views
Wait, my bad, I can see the reason behind having the same include file referanced by multiple namespaces now, nevermind me.
14. Re: Rob's going to hate me... (Remainder bug)
- Posted by Urz <Urzumph at HotPOP.com> Nov 08, 2003
- 601 views
> Don't lol too hard. > Your first one wasn't a bug, and neither is this one. As far as I am concerned, the first one WAS a bug. If someone wants to include the same file twice within their program, and have them act as two completely seperate copies of the same file, they should be able to - and the only concieveable way I can see of refering to them seperately is by usage of the namespace function. I re-wrote my include file so it handled being initated twice differently, but the point is, I should have been able to do it that way. And this one IS a bug, just not a bug with euphoria :P > This remainder issue came up on the mailing list > a few years ago. It's basically an incarnation of the old > "0.1 (0.01 etc.) can't be represented exactly on > Intel hardware" problem. Once or twice every year > someone on this list is shocked to find that > floating-point calculations aren't perfectly exact, > and the error can sometimes be magnified into an > obviously incorrect answer... > > > http://www.listfilter.com/cgi-bin/esearch.exu?fromMonth=2&fromYear=5&toMonth=2&toYear=5&postedBy=rds&keywords=remainder > My bad - I should have checked first. Pitty being on an AMD doesn't insulate you from that problem :(
15. Re: Rob's going to hate me... (Remainder bug)
- Posted by Derek Parnell <ddparnell at bigpond.com> Nov 08, 2003
- 589 views
----- Original Message ----- From: "Urzumph" <Urzumph at HotPOP.com> To: <EUforum at topica.com> Subject: Re: Rob's going to hate me... (Remainder bug) > > > > Don't lol too hard. > > Your first one wasn't a bug, and neither is this one. > > As far as I am concerned, the first one WAS a bug. If someone wants to > include the same file twice within their program, and have them act as > two completely seperate copies of the same file, they should be able to > - and the only concieveable way I can see of refering to them seperately > is by usage of the namespace function. I re-wrote my include file so it > handled being initated twice differently, but the point is, I should > have been able to do it that way. > > And this one IS a bug, just not a bug with euphoria :P The definition of BUG that I use is "an implementation that does not conform to the designer's specifications". Thus I do not see this as a bug, anymore than 'goto' not being supported is a bug. Not that I'm saying that a way of multiple 'include'-ing file is a bad thing. I would support a new key word, like 'insert', to implement this concept though and leave 'include' alone. -- Derek
16. Re: Rob's going to hate me... (Remainder bug)
- Posted by "Daniel Kluss" <xerox_irs at hotmail.com> Nov 08, 2003
- 618 views
I think it would be good to have multiple instances of the same include running, like include something.e {insta,instb,instc,instd,inste,instf} but I dont know if that is a good Idea maybe havinga better handle on scope while writing the include is better Daniel Kluss ----- Original Message ----- From: "Urzumph" <Urzumph at HotPOP.com> To: <EUforum at topica.com> Sent: Friday, November 07, 2003 10:47 PM Subject: Re: Rob's going to hate me... (Remainder bug) > > > Wait, my bad, I can see the reason behind having the same include file > referanced by multiple namespaces now, nevermind me. > > > > TOPICA - Start your own email discussion group. FREE! > >
17. Re: Rob's going to hate me... (Remainder bug)
- Posted by Irv Mullins <irvm at ellijay.com> Nov 09, 2003
- 610 views
On Saturday 08 November 2003 06:38 pm, Daniel wrote: > I think it would be good to have multiple instances of the same include > running, like > include something.e {insta,instb,instc,instd,inste,instf} > but I dont know if that is a good Idea maybe havinga better handle on > scope while writing the include is better It *is* a good idea. I'm doing that right now, and it is very useful. A program I'm working on has 3 different lists. Each "include" which managed a list (adding, deleting, editing items) was about 160 lines of code. I've replaced those 3 with a single include, included 3 times, saving 2/3 of the code, and making changes, bug fixes, etc. far easier (there's only one place to fix, instead of 3) Later, when I have 6 or 7 lists, I'll _still_ have only about 160 lines of code driving all the lists, so the savings could be significant. Irv -- Robert Tappen Morris, Jr., got six months in jail for crashing 10% of the computers that Bill Gates made $100 million crashing last weekend.
18. Re: Rob's going to hate me... (Remainder bug)
- Posted by "Derek Parnell" <ddparnell at bigpond.com> Nov 09, 2003
- 614 views
----- Original Message ----- From: "Irv Mullins" <irvm at ellijay.com> To: <EUforum at topica.com> Subject: Re: Rob's going to hate me... (Remainder bug) > > > On Saturday 08 November 2003 06:38 pm, Daniel wrote: > > > I think it would be good to have multiple instances of the same include > > running, like > > include something.e {insta,instb,instc,instd,inste,instf} > > but I dont know if that is a good Idea maybe havinga better handle on > > scope while writing the include is better > > It *is* a good idea. I'm doing that right now, and it is very useful. > A program I'm working on has 3 different lists. Each "include" which > managed a list (adding, deleting, editing items) was about 160 lines of code. > I've replaced those 3 with a single include, included 3 times, saving 2/3 of > the code, and making changes, bug fixes, etc. far easier (there's only one > place to fix, instead of 3) > > Later, when I have 6 or 7 lists, I'll _still_ have only about 160 lines of > code driving all the lists, so the savings could be significant. > > Which is exactly the effect I get in win32lib but without multiple includes. -- Derek
19. Re: Rob's going to hate me... (Remainder bug)
- Posted by Irv Mullins <irvm at ellijay.com> Nov 09, 2003
- 631 views
On Saturday 08 November 2003 10:02 pm, you wrote: > > Hello Irv, > > That's interesting news too. > I've been trying to convince Pete and Matt in another thread > "Pete: Your Question" > for the past several days now that this is a good thing > If you like you can check that thread to see if the > examples make sense to you. > > I see Derek might not exactly be 'pro' 'new includes' either. > > I think it depends on how much you have already used namespace > prefixes. If you have used them a lot then you tend to > like this new technique it seems. The way i see it, > everyone will catch on sooner or later > It's a very a powerful technique of namespace useage, but > in order to understand it people have to have see and understand > exactly why it's so powerful. It's not just another way of > doing something, it's doing it better in some cases. > When something cant benefit directly from this, sometimes it's > just plain ol faster to write and easier to maintain. > Apparently you have already discovered the maintainence part It's not as complete a solution as true object-orientation would be, since there's no easy way to override "methods". The only way I've found so far is to put the methods (routines that need to be different for different instances) into their own small includes. This has the unpleasant effect of increasing the number of files to juggle, and Eu's namespacing isn't quite up to the task of putting TWO includes into the same namespace, so the naming can get awkward. Irv -- Robert Tappen Morris, Jr., got six months in jail for crashing 10% of the computers that Bill Gates made $100 million crashing last weekend.