From: SourceForge.net <no...@so...> - 2009-09-15 17:34:50
|
Bugs item #2859027, was opened at 2009-09-14 22:15 Message generated for change (Comment added) made by dgp You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=2859027&group_id=10894 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 47. Bytecode Compiler Group: current: 8.5.7 Status: Open Resolution: None Priority: 5 Private: No Submitted By: Rickard Utgren (pixelz) >Assigned to: Don Porter (dgp) Summary: Bytecode Compiler & tcl_precision Initial Comment: The bytecode compiler breaks on the following snippet: proc DoPrecision {} { puts "A $::tcl_precision [expr { 1.1 + 2.2 }]" if {[catch { incr ::tcl_precision }]} { return } puts "B $::tcl_precision [expr { 1.1 + 2.2 }]" DoPrecision } DoPrecision Example result: A 0 3.3000000000000003 B 1 3.0 A 1 3.3000000000000003 B 2 3.0 A 2 3.3000000000000003 B 3 3.0 A 3 3.3000000000000003 B 4 3.0 A 4 3.3000000000000003 B 5 3.0 A 5 3.3000000000000003 B 6 3.0 A 6 3.3000000000000003 B 7 3.0 A 7 3.3000000000000003 B 8 3.0 A 8 3.3000000000000003 B 9 3.0 A 9 3.3000000000000003 B 10 3.0 A 10 3.3000000000000003 B 11 3.0 A 11 3.3000000000000003 B 12 3.0 A 12 3.3000000000000003 B 13 3.0 A 13 3.3000000000000003 B 14 3.0 A 14 3.3000000000000003 B 15 3.0 A 15 3.3000000000000003 B 16 3.0 A 16 3.3000000000000003 B 17 3.0 A 17 3.3000000000000003 ---------------------------------------------------------------------- >Comment By: Don Porter (dgp) Date: 2009-09-15 13:34 Message: Starting in Tcl 8.5, the expression parser detects constant expressions such as " 1.1 + 2.2 " and notices that their value is completely known at compile time, and creates bytecode that simply pushes that value on the stack. There is no runtime computation at all. This makes perfect sense using the 8.5 defaults where EIAS for double values actually works. For legacy support of scripts continuing to use the ::tcl_precision variable against advice, the assumption that a constant expression will always compute the same result fails. Perhaps this can be fixed with some additional detections of changes to the ::tcl_precision variable triggering a reset of some compile epoch to force recompile of the expressions? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=110894&aid=2859027&group_id=10894 |