# Why does Sage return negative number when evaluating 181.0%360

```
sage: print 181%360 , 181.0%360
181 -179.000000000000
```

Why does Sage return negative number when evaluating 181.0%360

```
sage: print 181%360 , 181.0%360
181 -179.000000000000
```

add a comment

1

So that this code works

```
sage: a = 181.0
sage: b = 360
sage: n = (a / b).round()
sage: b * n + (a % b) == a
True
```

From the sage docstring (which you can read by typing `a.__mod__?`

)

Return the value of "left - n*right", rounded according to the rounding mode of the parent, where "n" is the integer quotient of "x" divided by "y". The integer "n" is rounded toward the nearest integer (ties rounded to even).

Exactly for the reason I said: so that the output is consistent with the output of `a/b`

, the rounding mode, and the mathematical definition of Euclidean division (which in truth does not make much sense for floats).

In Python rounding is done to the lowest integer, so it makes sense to return 181, indeed

```
>>> 360 * int(181.0 / 360) + (181.0 % 360)
181.0
```

In Mathematica, rounding is done to the closest integer, and indeed

```
360*round(181.0 / 360) + (181.0 mod 360)
```

answers 541 on WolframAlpha. Oups! Guess Mathematica does not really care for mathematical consistency.

Asked: **
2014-11-23 09:32:43 -0500
**

Seen: **110 times**

Last updated: **Nov 23 '14**

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.