Ask Your Question
1

Possible bug of sum function

asked 2016-04-11 19:15:50 +0200

jllb gravatar image

Consider the following code:

def s(n):
    return sum(k/n for k in range(n + 1))

L0 = s(2)

for n in range(2, 3):
    L1 = s(n)

The answers are (using sage 7.1):

print L0, L1
(3/2, 1)

In the second case sage is using the usual integer division of python 2.x while in the first one it is using the exact representation of rationals. Is this a known bug?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2016-04-11 20:32:15 +0200

tmonteil gravatar image

updated 2016-04-11 20:33:32 +0200

It is not a bug. When you write s(2), Sage preparse the 2 so that it is the Sage Integer 2, not the Python int 2. With such Sage integers, the division leads to a Sage Rational. Now, when you use the range function, it produces Python ints, which explains your problem. If you want to generate a list of Sage Integers, you should use the srange function instead of range.

edit flag offensive delete link more

Comments

Thank you, however I find this behavior at least strange. If n is a Sage Integer, I understand range(n) produces a list of Python integers. So in both cases the sum runs over a list of Python integers. However, in one case they are converted into Sage integers and in the other case they aren't. I don't understand why.

jllb gravatar imagejllb ( 2016-04-11 22:28:21 +0200 )edit
1

In your call L0=s(2), s gets called with a Sage integer, and dividing a sage integer by a python integer is defined by converting the python integer to a sage integer and then doing the division

In your second example, n in range(2,3), we have that n is a python integer, so when s executed, two python integers are divided. We never get a chance to adjust the result. It's indeed strange and confusing, but we can't do anything about it unless we heavily patch python. If we ever change to Python3, it will be slightly better (you'll get a float rather than a python integer back)

nbruin gravatar imagenbruin ( 2016-04-11 23:08:04 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2016-04-11 19:15:50 +0200

Seen: 234 times

Last updated: Apr 11 '16