Python 3.2 中的截断除法

发布于 2024-10-28 06:35:46 字数 265 浏览 1 评论 0原文

  1. Python 3.2 中整数除法 // 比浮点数除法 / 更快吗?如果我知道我将仅使用整数,我是否应该选择 // 而不是默认为 /

  2. 如何在 Python 3.2 中获得整数截断行为?

    <代码>1/2 = 0

    -1/2 = 0

谢谢。

  1. Is integer floor division // faster than float division / in Python 3.2? If I know I'm going to be working with integers only, should I favour // instead of defaulting to /?

  2. How do I get integer truncation behaviour in Python 3.2?

    1/2 = 0

    -1/2 = 0

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拿命拼未来 2024-11-04 06:35:46
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

这使您非常接近您想要的中缀表示法。

这个故事的寓意是……不要让你的朋友在昏昏欲睡时编码。

from math import (floor, ceil)
def trunc_div(a, b):
    c = a / b
    return floor(c) if c > 0 else ceil(c)

Test it to make sure it's right. It's late and I'm doing math while sleepy.

Actually, don't do that. While seeing if I could subclass int to do truncated division (don't do that either (also, it didn't work)), it occurred to me that int() itself will truncate reals, resulting in this:

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

Which is a rather foolish wrapper.

So, just use float division, and truncate it with int():

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

This gets you pretty close to the infix notation you desired.

The moral of this story is... don't let your friends code while drowsy.

断桥再见 2024-11-04 06:35:46

这是我经过一番尝试和错误后得到的截断除法。这可以处理任意大的整数。

def truncdiv(num : int, denom : int):
    if (num < 0) != (denom < 0):
        return -(num // -denom)
    else:
        return num // denom

我在寻找截断的 divmod(商余数)时发现了这一点。我所拥有的是类似的:

def truncdivmod(num : int, denom : int):
    if (num < 0) != (denom < 0):
        q, r = divmod(num, -denom)
        return [-q, r]
    else:
        return divmod(num, denom)

Here's what I have for truncation division after some trial and error. This handles arbitrarily large integers.

def truncdiv(num : int, denom : int):
    if (num < 0) != (denom < 0):
        return -(num // -denom)
    else:
        return num // denom

I found this in looking for a truncated divmod (quotient-remainder). What I have is analogous:

def truncdivmod(num : int, denom : int):
    if (num < 0) != (denom < 0):
        q, r = divmod(num, -denom)
        return [-q, r]
    else:
        return divmod(num, denom)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文