python - math.floor(N) vs N // 1 - Stack Overflow
Why do Python's math.ceil() and math.floor() operations return floats instead of integers? - Stack Overflow
Why does round(0.5) = 0?
Specifically, because it uses the "ties to even" rounding rule (there is more than one rule allowed by the IEEE standard) as it's more fair statistically
More on reddit.comWhy not always use Math.round instead of Math.floor?
Well, they are two different functions, with two different uses. Math.floor() always rounds down to the nearest integer, while Math.round() will round up or down depending on what side of .5 the number falls on. So, the basic answer is that you use which one gets the result you expect.
When it comes to generating random numbers though, Math.floor() has a more even distribution than Math.round(). If you want to generate a random number between 0 and 2, take the following examples:
Math.floor(Math.random() * 3). Here, 0-0.999999 will give you 0, 1.0 to 1.999999 will give you 1, and 2.0 to 2.999999 will give you 2. Every number has a 33% chance of being the result.
Math.round(Math.random() * 2). Here, 0-0.499999 will give you 0, 0.5 to 1.499999 will give you 1, and 1.5 to 1.999999 will give you 2. Note that the range of numbers that lead to a 1 is twice as big as those that lead to 0 or 1. That is 25% chance of 0, 50% chance of 1, and 25% chance of 2.
What Does Floor Mean in Python?
Why Would You Use Floor Division?
What are the Related Courses and Blogs Provided by The Knowledge Academy?
Videos
You will spot a difference when using floats:
>>> 1000.5//1
1000.0
>>> floor(1000.5)
1000
floor returns an integer. For most cases 1000 and 1000.0 are equivalent, but not always.
math.floor(N)returns an int, andN // 1returns a float.>>> type(math.floor(-4.4)) <class 'int'> >>> type((-4.4) // 1) <class 'float'>Because of this
floor(nan)will raise ValueError whilenan // 1returns NaN (similar for ±inf.)>>> math.floor(math.nan) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: cannot convert float NaN to integer >>> math.nan // 1 nan
I don't think there are other differences when N is a float, since x//y is defined as ⌊x/y⌋.
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.
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.