From: Arjen M. <arj...@wl...> - 2008-12-31 05:22:20
|
Hi, I am working on the Tcl examples and found possible causes for the rounding errors vis-a-vis the C examples, namely not using braces around all expressions. (The lack of braces means that the numbers are filled as strings before the expression is evaluated, whereas with braces the [expr] command can use the numerical value directly.) Example 13 contained some deviations from the C version, but I noticed that the C version (and the Tcl version too) uses a loop with a floating-point variable. This in general is asking for rounding trouble. It did not happen in the C case, because effectively the numbers used are integer (they did happen in the Tcl case, as there a fraction 2pi/500 was used). I wonder though whether we should use this kind of loops at all. Changing it means that we need to propagate it to all languages, but leaving it might suggest that we accept this - IMHO rather undesirable - practice. What are your opinions? Regards, Arjen |
From: Alan W. I. <ir...@be...> - 2008-12-31 05:58:18
|
On 2008-12-31 06:22+0100 Arjen Markus wrote: > Hi, > > I am working on the Tcl examples and found possible causes > for the rounding errors vis-a-vis the C examples, namely > not using braces around all expressions. (The lack of braces > means that the numbers are filled as strings before the > expression is evaluated, whereas with braces the [expr] > command can use the numerical value directly.) > > Example 13 contained some deviations from the C version, > but I noticed that the C version (and the Tcl version too) > uses a loop with a floating-point variable. This in > general is asking for rounding trouble. It did not happen > in the C case, because effectively the numbers used are > integer (they did happen in the Tcl case, as there a > fraction 2pi/500 was used). I would change the Tcl version to match the C logic (and the logic for the other languages as well) which (as you noted) does use integers for the theta-related variables for exactly the rounding reasons you mentioned. Alan __________________________ Alan W. Irwin Astronomical research affiliation with Department of Physics and Astronomy, University of Victoria (astrowww.phys.uvic.ca). Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); PLplot scientific plotting software package (plplot.org); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ |
From: Arjen M. <arj...@wl...> - 2008-12-31 07:35:20
|
> > I would change the Tcl version to match the C logic (and the logic for the > other languages as well) which (as you noted) does use integers for the > theta-related variables for exactly the rounding reasons you mentioned. > Which is what I have done in my private copy. I have not had a chance to test these and other changes yet, but I will in the coming few days. Regards, Arjen |
From: Andrew R. <and...@us...> - 2009-01-04 19:45:00
|
On Wed, Dec 31, 2008 at 08:35:06AM +0100, Arjen Markus wrote: > > > > I would change the Tcl version to match the C logic (and the logic for the > > other languages as well) which (as you noted) does use integers for the > > theta-related variables for exactly the rounding reasons you mentioned. > > > > Which is what I have done in my private copy. I have not had a chance > to test these and other changes yet, but I will in the coming few days. Arjen, Just for the record, your changes make no difference to me. This is on Ubuntu Hardy x86 32-bit with tcl 8.4. I still have rounding differences for examples 3, 11 and 20 as before. I can't test example 21 as it is not enable with tcl 8.4. Will try to upgrade to tcl 8.5 and test again. Andrew |
From: Arjen M. <arj...@wl...> - 2009-01-05 09:33:48
|
> On Wed, Dec 31, 2008 at 08:35:06AM +0100, Arjen Markus wrote: >> > >> > I would change the Tcl version to match the C logic (and the logic for >> the >> > other languages as well) which (as you noted) does use integers for >> the >> > theta-related variables for exactly the rounding reasons you >> mentioned. >> > >> >> Which is what I have done in my private copy. I have not had a chance >> to test these and other changes yet, but I will in the coming few days. > > Arjen, > > Just for the record, your changes make no difference to me. This is on > Ubuntu Hardy x86 32-bit with tcl 8.4. I still have rounding differences > for examples 3, 11 and 20 as before. I can't test example 21 as it is > not enable with tcl 8.4. Will try to upgrade to tcl 8.5 and test again. > I should have mentioned I have been doing these tests with Tcl 8.5. The difference between Tcl 8.4 and Tcl 8.5 that is of importance here is that in 8.5 the parameter that determines the precision for converting numbers to strings (tcl_precision) is set to 17 by default, making an exact reconversion possible. (The Tcl interface still uses the old string-based mechanism, hence tcl_precision is important. I intend to change that to the Tcl_Obj mechanism.) Example 11 shows very small differences: several numbers like 2384 instead of 2383 in the PostScript output. Perhaps I can get rid of these too, but I gave priority to the others (examples 15 and 16 are fine then?). I will have a look at example 3. It is a new one to me. Example 20 is causing me a slight headache :(. I have checked just about everything I could think of: - All expressions are braced - The file is read correctly - all values are identical to the values I see in the C example - The PostScript file differs in the way the gray colour is determined, but I have not been able to determine why that would be the case. plscmap1n and plscmap1l are called with identical arguments. I will have to descent further into the library functions to determine the cause. Regards, Arjen |
From: Alan W. I. <ir...@be...> - 2009-01-05 19:16:48
|
On 2009-01-05 10:33+0100 Arjen Markus wrote: > [Andrew wrote] >> Just for the record, your changes make no difference to me. This is on >> Ubuntu Hardy x86 32-bit with tcl 8.4. I still have rounding differences >> for examples 3, 11 and 20 as before. I can't test example 21 as it is >> not enable with tcl 8.4. Will try to upgrade to tcl 8.5 and test again. >> > > I should have mentioned I have been doing these tests with Tcl 8.5. > The difference between Tcl 8.4 and Tcl 8.5 that is of importance here > is that in 8.5 the parameter that determines the precision for > converting numbers to strings (tcl_precision) is set to 17 by default, > making an exact reconversion possible. > > (The Tcl interface still uses the old string-based mechanism, hence > tcl_precision is important. I intend to change that to the Tcl_Obj > mechanism.) > > Example 11 shows very small differences: several numbers like 2384 > instead of 2383 in the PostScript output. Perhaps I can get rid of > these too, but I gave priority to the others (examples 15 and 16 are > fine then?). > > I will have a look at example 3. It is a new one to me. > > Example 20 is causing me a slight headache :(. I have checked just > about everything I could think of: > - All expressions are braced > - The file is read correctly - all values are identical to the > values I see in the C example > - The PostScript file differs in the way the gray colour is > determined, but I have not been able to determine why that > would be the case. plscmap1n and plscmap1l are called with > identical arguments. > > I will have to descent further into the library functions to > determine the cause. Hi Arjen: Here is what I now (revision 9253) get with Tcl-8.5 on Debian testing. tcl Missing examples : 19 Differing postscript output : 11 20 Missing stdout : Differing stdout : That's a substantial improvement from what I got before for Tcl-8.5. In particular some large differences that could not be analyzed by ndiff for two examples (15 and 16?) have been eliminated. Good work! The remaining differences for Tcl-8.5 are just for examples 11 and 20. The ndiff result confirms what you said about the small differences for example 11. software@raven> ndiff -relerr 0.9 x11[ct].psc |head 6c6 < %%CreationDate: Mon Jan 5 10:32:05 2009 --- field 5 > %%CreationDate: Mon Jan 5 10:33:42 2009 ### Maximum relative error in matching lines = 7.79e-04 at line 33792 field 16 Here is the ndiff summary for example 20. software@raven> ~/ndiff/install/bin/ndiff -relerr 1 x20[ct].psc 6c6 < %%CreationDate: Mon Jan 5 10:32:06 2009 --- field 5 > %%CreationDate: Mon Jan 5 10:33:44 2009 ### Maximum relative error in matching lines = 1.0e+00 at line 255608 field 1 To see the first two examples of that type of large relative error ndiff should be run as follows: software@raven> ~/ndiff/install/bin/ndiff -relerr 0.9 x20[ct].psc |head -12 6c6 < %%CreationDate: Mon Jan 5 10:32:06 2009 --- field 5 > %%CreationDate: Mon Jan 5 10:33:44 2009 255608c255608 < 0.0039 0.0039 0.0039 C Z --- field 1 relative error 1.0e+00 > 0.0000 0.0000 0.0000 C Z 307524c307524 < 0.0039 0.0039 0.0039 C Z --- field 1 relative error 1.0e+00 > 0.0000 0.0000 0.0000 C Z These are RGB PostScript colour settings so this confirms your result that there is an important Tcl-8.5 colour issue with example 20. In sum, the results I get on my Linux Tcl-8.5 (64-bit) platform seem to confirm everything you have found on your Windows Tcl-8.5 platform including the good results you have now achieved for all examples other than 11 and 20. That sort of cross-platform confirmation is reassuring, and I hope it encourages you to go on to solve the issues for example 11 and 20. Alan __________________________ Alan W. Irwin Astronomical research affiliation with Department of Physics and Astronomy, University of Victoria (astrowww.phys.uvic.ca). Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); PLplot scientific plotting software package (plplot.org); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ |
From: Arjen M. <arj...@wl...> - 2009-01-06 07:57:50
|
> Hi Arjen: > > Here is what I now (revision 9253) get with Tcl-8.5 on Debian testing. > > tcl > Missing examples : 19 > Differing postscript output : 11 20 > Missing stdout : > Differing stdout : > > That's a substantial improvement from what I got before for Tcl-8.5. In > particular some large differences that could not be analyzed by ndiff for > two examples (15 and 16?) have been eliminated. Good work! > > The remaining differences for Tcl-8.5 are just for examples 11 and 20. > The ndiff result confirms what you said about the small differences for > example 11. > > software@raven> ndiff -relerr 0.9 x11[ct].psc |head > 6c6 > < %%CreationDate: Mon Jan 5 10:32:05 2009 > --- field 5 >> %%CreationDate: Mon Jan 5 10:33:42 2009 > ### Maximum relative error in matching lines = 7.79e-04 at line 33792 > field 16 > > Here is the ndiff summary for example 20. > > software@raven> ~/ndiff/install/bin/ndiff -relerr 1 x20[ct].psc > 6c6 > < %%CreationDate: Mon Jan 5 10:32:06 2009 > --- field 5 >> %%CreationDate: Mon Jan 5 10:33:44 2009 > ### Maximum relative error in matching lines = 1.0e+00 at line 255608 > field 1 > > To see the first two examples of that type of large relative error ndiff > should be run as follows: > > software@raven> ~/ndiff/install/bin/ndiff -relerr 0.9 x20[ct].psc |head > -12 > 6c6 > < %%CreationDate: Mon Jan 5 10:32:06 2009 > --- field 5 >> %%CreationDate: Mon Jan 5 10:33:44 2009 > 255608c255608 > < 0.0039 0.0039 0.0039 C Z > --- field 1 relative error 1.0e+00 >> 0.0000 0.0000 0.0000 C Z > 307524c307524 > < 0.0039 0.0039 0.0039 C Z > --- field 1 relative error 1.0e+00 >> 0.0000 0.0000 0.0000 C Z > > These are RGB PostScript colour settings so this confirms your > result that there is an important Tcl-8.5 colour issue with example 20. > > In sum, the results I get on my Linux Tcl-8.5 (64-bit) platform seem to > confirm everything you have found on your Windows Tcl-8.5 platform > including > the good results you have now achieved for all examples other than 11 and > 20. > That sort of cross-platform confirmation is reassuring, and I hope it > encourages you to go on to solve the issues for example 11 and 20. > Hi Alan, that is certainly encouraging to hear. I have looked at example 11 again and I conclude that the difference most probably arises in the interface for just one of the plot routines - I think plot3d, judging from the locations of the differences versus the literal text ("Example 11 ..."). Something similar is happening in example 20: it is no longer the Tcl code where the differences are coming from. It is the interface. Regards, Arjen |
From: Arjen M. <arj...@wl...> - 2009-01-06 20:32:55
|
> On 2009-01-05 10:33+0100 Arjen Markus wrote: > >> >> Example 20 is causing me a slight headache :(. I have checked just >> about everything I could think of: >> - All expressions are braced >> - The file is read correctly - all values are identical to the >> values I see in the C example >> - The PostScript file differs in the way the gray colour is >> determined, but I have not been able to determine why that >> would be the case. plscmap1n and plscmap1l are called with >> identical arguments. >> >> I will have to descent further into the library functions to >> determine the cause. > > Hi Arjen: > > In sum, the results I get on my Linux Tcl-8.5 (64-bit) platform seem to > confirm everything you have found on your Windows Tcl-8.5 platform > including > the good results you have now achieved for all examples other than 11 and > 20. > That sort of cross-platform confirmation is reassuring, and I hope it > encourages you to go on to solve the issues for example 11 and 20. > Hi Alan, the problem was almost literally blindingly obvious, but I had to print out just about everything I could think of and then some. The mistake was that I called plscmap1n in gray_cmap with the argument num_col, instead of $num_col - so the name of the variable, instead of its value. With that corrected, I get a perfect match for example 20! Now, there are still the strange deviations in example 11. I am not sure how to proceed here - probably the same stubbornness as for example 20 is required :). But I am also thinking of how to implement example 19 - it should not be that difficult. Regards, Arjen |
From: Arjen M. <arj...@wl...> - 2009-01-07 05:23:12
|
>> On 2009-01-05 10:33+0100 Arjen Markus wrote: > > Now, there are still the strange deviations in example 11. I am not > sure how to proceed here - probably the same stubbornness as for > example 20 is required :). > It turned out to be easier than that: the cause was the same as before but in a different part of the bindings. I changed the format for returning the minimum and maximum in the matrix extension to %.17g to guarantee a lossless conversion of the floating point number to a string and that did the trick. So, I reckon the Tcl examples now all give a perfect match (at least with Tcl 8.5), only example 19 is still missing. Regards, Arjen |
From: Maurice L. <mj...@br...> - 2009-01-07 19:15:44
|
On Wednesday, January 7, 2009 at 06:23:06 (+0100) Arjen Markus writes: > >> On 2009-01-05 10:33+0100 Arjen Markus wrote: > > > > Now, there are still the strange deviations in example 11. I am not > > sure how to proceed here - probably the same stubbornness as for > > example 20 is required :). > > > > It turned out to be easier than that: the cause was the same as > before but in a different part of the bindings. I changed the > format for returning the minimum and maximum in the matrix > extension to %.17g to guarantee a lossless conversion of the > floating point number to a string and that did the trick. > > So, I reckon the Tcl examples now all give a perfect match > (at least with Tcl 8.5), only example 19 is still missing. Great to hear. -- Maurice LeBrun |
From: Alan W. I. <ir...@be...> - 2009-01-07 07:28:27
|
On 2009-01-07 06:23+0100 Arjen Markus wrote: > So, I reckon the Tcl examples now all give a perfect match > (at least with Tcl 8.5), only example 19 is still missing. Hi Arjen: I confirm the perfect (except for missing ex 19) results for Tcl-8.5 on Linux as well. Good work! Alan __________________________ Alan W. Irwin Astronomical research affiliation with Department of Physics and Astronomy, University of Victoria (astrowww.phys.uvic.ca). Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); PLplot scientific plotting software package (plplot.org); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ |
From: Andrew R. <and...@us...> - 2009-01-07 09:32:24
|
On Tue, Jan 06, 2009 at 11:28:20PM -0800, Alan Irwin wrote: > On 2009-01-07 06:23+0100 Arjen Markus wrote: > > So, I reckon the Tcl examples now all give a perfect match > > (at least with Tcl 8.5), only example 19 is still missing. > > Hi Arjen: > > I confirm the perfect (except for missing ex 19) results for Tcl-8.5 on > Linux as well. Good work! On my 64-bit intel system with Ubunutu and tcl-8.4 I now also get exact agreement except for 19 (not implemented) and 21 (required tcl-8.5). Will check my 32-bit system at home later. Thanks for the detective work! Andrew |
From: Arjen M. <arj...@wl...> - 2009-01-07 09:38:18
|
> On Tue, Jan 06, 2009 at 11:28:20PM -0800, Alan Irwin wrote: >> On 2009-01-07 06:23+0100 Arjen Markus wrote: >> > So, I reckon the Tcl examples now all give a perfect match >> > (at least with Tcl 8.5), only example 19 is still missing. >> >> Hi Arjen: >> >> I confirm the perfect (except for missing ex 19) results for Tcl-8.5 on >> Linux as well. Good work! > > On my 64-bit intel system with Ubunutu and tcl-8.4 I now also get exact > agreement except for 19 (not implemented) and 21 (required tcl-8.5). > Will check my 32-bit system at home later. > > Thanks for the detective work! > Hi Andrew, excellent! That means that for a rather wide range of architectures and Tcl versions we have got it right now. That leaves example 19 (not exactly a piece of cake, but nothing really complicated) and the odd crash in Tk. Regards, Arjen |
From: Andrew R. <and...@us...> - 2009-01-07 19:42:06
|
On Wed, Jan 07, 2009 at 09:32:17AM +0000, Andrew Ross wrote: > On Tue, Jan 06, 2009 at 11:28:20PM -0800, Alan Irwin wrote: > > On 2009-01-07 06:23+0100 Arjen Markus wrote: > > > So, I reckon the Tcl examples now all give a perfect match > > > (at least with Tcl 8.5), only example 19 is still missing. > > > > Hi Arjen: > > > > I confirm the perfect (except for missing ex 19) results for Tcl-8.5 on > > Linux as well. Good work! > > On my 64-bit intel system with Ubunutu and tcl-8.4 I now also get exact > agreement except for 19 (not implemented) and 21 (required tcl-8.5). > Will check my 32-bit system at home later. > > Thanks for the detective work! > > Andrew At home (32-bit intel system, tcl-8.4) I get a single value differing by 1 in example 3 and example 14a (2nd stream of example 14). These I can really just put down to rounding error. The problems with examples 11 and 20 have been cured by your fix. Andrwe |