Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do Python's math.ceil() and math.floor() operations return floats instead of integers?

Tags:

python

math

Can someone explain this (straight from the docs- emphasis mine):

math.ceil(x) Return the ceiling of x as a float, the smallest integer value greater than or equal to x.

math.floor(x) Return the floor of x as a float, the largest integer value less than or equal to x.

Why would .ceil and .floor return floats when they are by definition supposed to calculate integers?


EDIT:

Well this got some very good arguments as to why they should return floats, and I was just getting used to the idea, when @jcollado pointed out that they in fact do return ints in Python 3...

like image 224
Yarin Avatar asked Dec 20 '11 22:12

Yarin


2 Answers

As pointed out by other answers, in python they return floats probably because of historical reasons to prevent overflow problems. However, they return integers in python 3.

>>> import math >>> type(math.floor(3.1)) <class 'int'> >>> type(math.ceil(3.1)) <class 'int'> 

You can find more information in PEP 3141.

like image 165
jcollado Avatar answered Oct 29 '22 00:10

jcollado


The range of floating point numbers usually exceeds the range of integers. By returning a floating point value, the functions can return a sensible value for input values that lie outside the representable range of integers.

Consider: If floor() returned an integer, what should floor(1.0e30) return?

Now, while Python's integers are now arbitrary precision, it wasn't always this way. The standard library functions are thin wrappers around the equivalent C library functions.

like image 28
Greg Hewgill Avatar answered Oct 28 '22 23:10

Greg Hewgill