It does explain it, but still results are not obvious :)

For example, this code:

=======
set bn [set rn 0]

for {set i 0} {$i < 1000} {incr i} {
    set f "${i}.005"
    set r [format %.2f $f]
    set d [expr $r - $i]
    if {$d > 0.0} {
        incr bn
    } else {
        incr rn
    }
}

puts "Rounded to 0.01 in $bn cases, to 0.0 in $rn cases"
============

produces results:

Rounded to 0.01 in 41 cases, to 0.00 in 959 cases

Thanks,
~ Alex.

On Sat, May 3, 2008 at 7:08 PM, Dossy Shiobara <[EMAIL PROTECTED]> wrote:
> On 2008.05.03, William Scott Jordan <[EMAIL PROTECTED]> wrote:
>  > This is really more of a tcl question, but I'm hoping that someone on
>  > the list might have an explanation.  Why does [format %.2f 18.005] round
>  > down to "18.00" and [format %.2f 1.415] round up to "1.42"?  Any
>  > guesses?  Am I missing something obvious here?
>
>  Classic floating-point precision and rounding issue.  See:
>
>     
> http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding
>
>  Read the third paragraph in that section.
>
>  --
>  Dossy Shiobara              | [EMAIL PROTECTED] | http://dossy.org/
>  Panoptic Computer Network   | http://panoptic.com/
>   "He realized the fastest way to change is to laugh at your own
>     folly -- then you can let go and quickly move on." (p. 70)
>
>
>
>
>  --
>  AOLserver - http://www.aolserver.com/
>
>  To Remove yourself from this list, simply send an email to <[EMAIL 
> PROTECTED]> with the
>  body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: 
> field of your email blank.
>


--
AOLserver - http://www.aolserver.com/

To Remove yourself from this list, simply send an email to <[EMAIL PROTECTED]> 
with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: 
field of your email blank.

Reply via email to