5

What's New In Python 3.7から 、 new があることがわかりますmath.remainder。それは言う

y に関する x の IEEE 754 スタイルの剰余を返します。有限の x と有限の非ゼロ y の場合、これは差x - n*yです。ここで、n は商 の正確な値に最も近い整数x / yです。x / yが 2 つの連続する整数のちょうど中間にある場合、最も近い偶数の整数が に使用されnます。したがって、剰余r = remainder(x, y)は常に を満たしabs(r) <= 0.5 * abs(y)ます。

特殊なケースは IEEE 754 に従います。特に、remainder(x, math.inf)任意の有限 x の場合は x でありremainder(x, 0)、非 NaN x の場合はremainder(math.inf, x)レイズになります。ValueError剰余演算の結果がゼロの場合、そのゼロは x と同じ符号になります。

IEEE 754 バイナリ浮動小数点を使用するプラットフォームでは、この操作の結果は常に正確に表現できます。丸め誤差は発生しません。

%しかし、私たちはまた、あるシンボルがあることを覚えています

の残りx / y

また、オペレーターへのメモがあることもわかります。

複素数ではありません。代わりに、必要にabs()応じて float に変換してください。

可能な場合でも、Python 3.7 を実行しようとはしていません。

しかし、私は試しました

Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> 100 % math.inf
100.0
>>> math.inf % 100
nan
>>> 100 % 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

したがって、違いは、ではなくnan、ドキュメントに記載されているようになりますZeroDivisionErrorValueError

%では、問題はとの違いは何math.remainderですか? math.remainder複素数でも機能しますか(それ%から欠けています)? 主な利点は何ですか?

これは、公式の CPython github リポジトリからのソースです。math.remainder

4

2 に答える 2