The "range" function is a Python one, and it returns Python ints.
Python ints have truncating division, so that 3/2 = 1, not 3/2. When
you type 3/2 at the Sage command, it's preparsed to be Sage Integers:

sage: 3/2
3/2
sage: preparse("3/2")
'Integer(3)/Integer(2)'
sage: int(3)/int(2)
1
sage: 3r/2r
1

(I don't know what the "r" is supposed to stand for but I always think
of it as "raw", i.e. Python, not Sage.  I might even be right.)  So in
your code your C values are wrong in the second loop.   They work in
the first loop because "B=-2" makes it a Sage Integer, and so the
results of divisions can become Rationals like you expect.


print 'Loop 2:'
for A in range(-3,-1):
   for B in range(-3,-1):
       Cint = -A*B/(A+B)
       CInt = (1)*-A*B/(A+B)
       print A, B,
       print 'Cint:', Cint, A*B+Cint*(A+B),
       print 'CInt:', CInt, A*B+CInt*(A+B)

gives:

-3 -3 Cint: 1 3 CInt: 3/2 0
-3 -2 Cint: 1 1 CInt: 6/5 0
-2 -3 Cint: 1 1 CInt: 6/5 0
-2 -2 Cint: 1 0 CInt: 1 0

The multiplication by the Sage Integer 1 makes the CInt expression a
Sage one, and so it works.  For these reasons, I tend to avoid using
"range" in Sage code entirely.  There are several
alternatives.  There's srange/xsrange=sxrange

sage: srange(-3, -1)
[-3, -2]
sage: sxrange(-3, -1)
<generator object generic_xsrange at 0x10d57ae10>
sage: list(sxrange(-3, -1))
[-3, -2]

(The "s" stands for Sage):

Or you can be explicit and use IntegerRange, which gives a more
informative string:

sage: IntegerRange(-3, -1)
{-3, -2}

I like the "(a..b)" and "[a..b]" syntaxes myself:

sage: for A in (-3..-2): print A, type(A)
....:
-3 <type 'sage.rings.integer.Integer'>
-2 <type 'sage.rings.integer.Integer'>

but note that it includes the right hand limit.  I find this is more
useful in mathematical code than in pure programming, mostly because I
often find cases where I want (a..a) to include a, but your mileage
may vary.

Does that make sense?


Doug

-- 
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org

Reply via email to