Усеченное деление в Python 3.2 - PullRequest
3 голосов
/ 29 марта 2011
  1. Является ли целочисленное деление по полу // быстрее, чем деление с плавающей точкой / в Python 3.2?Если я знаю, что буду работать только с целыми числами, стоит ли мне отдавать предпочтение // вместо значения по умолчанию /?

  2. Как получить поведение усечения целых чисел в Python 3.2?

    1/2 = 0

    -1/2 = 0

Спасибо.

1 Ответ

2 голосов
/ 29 марта 2011
from math import (floor, ceil)
def trunc_div(a, b):
    c = a / b
    return floor(c) if c > 0 else ceil(c)

Проверьте это, чтобы убедиться, что это правильно.Уже поздно, и я занимаюсь математикой, пока сплю.

На самом деле, не делай этого.Когда я увидел, могу ли я создать подкласс int для усеченного деления (тоже не делаю этого (также, это не сработало)), мне пришло в голову, что int() сам усечет реалы, в результате чего:

def trunc_div(a, b):
    return int(a / b)

Это довольно глупая оболочка.

Так что, просто используйте деление с плавающей запятой и обрежьте его с помощью int():

>>> int(1 / 2)
0
>>> int(-1 / 2)
0

Это приблизит вас к инфиксуобозначение, которое вы хотели.

Мораль этой истории ... не позволяйте своим друзьям писать код, пока сонливы.

...