Re: Integer arithmetic problem
- From: Mark Janssen <mpc.janssen@xxxxxxxxx>
- Date: 31 May 2007 12:24:31 -0700
On May 31, 9:03 pm, n...@xxxxxxxxxxxxxxxxxxxx wrote:
I am not sure if it is me or our bellowed "expr" command, but I need
someone to set me straight.
In C the command:
printf("%d\n", -4/3);
gives: -1
I searched c.l.tcl and found a post from 1/27 2005 which said:
set tcl_precision 17 ;# Expressly: to show imperfections with real numbers!
expr {4/3} ==> 1
expr {4/-3} ==> -1
BUT, when I do it in tclsh itself:
expr {-4/3} or expr {4/-3} gives -2 ???
Has someone messed up with integer arithmetic in recent
versions of tcl (I am running 8.4.14)
Just tried on the older version 8.4p1 on different OS/CPU type and got
the same.
Now this is not an academic pursuit.
I was coding a data translator and documentation was
giving a particular expresion to be calculated as
integer arithmetic and I was getting wrong answers.
Anyone has a clue as to what is going on.
I haven't looked at the src yet, but it may get there :-) .
Thanks,
Nikola
When using integer division which results in a remainder, there is no
'correct' answer. The correct answer would be -1.333..
So then whether you round up to -1 or down to -2 is left to
definition. Most scripting languages (at least Python and Ruby) will
round down as Tcl does.
In C < C99 it was not defined what the answer would be (it was
impkementation defined), but on intel HW at least it was -1. In C99 it
was defined to have the value of -1 (e.g. round towards zero, which is
unfortunately different from the rest of the world).
As to why rounding towards zero or down would be better I don't know,
but there are no doubt very good reasons for one and the other.
See http://praisecurseandrecurse.blogspot.com/2006/12/division-bell-tolls-for-me-part-four.html
for some nice background.
Mark
.
- Follow-Ups:
- Re: Integer arithmetic problem
- From: nmil
- Re: Integer arithmetic problem
- References:
- Integer arithmetic problem
- From: nmil
- Integer arithmetic problem
- Prev by Date: Integer arithmetic problem
- Next by Date: Re: ?? exec prog << value ??
- Previous by thread: Integer arithmetic problem
- Next by thread: Re: Integer arithmetic problem
- Index(es):
Relevant Pages
|