GNU C ライブラリには関数drem
(alias remainder
) があります。
Google App Engine Python 2.7 ランタイムでサポートされているモジュールを使用して、この関数をシミュレートするにはどうすればよいですか?
のGNUマニュアルからdrem
:
これらの関数は
fmod
、内部商 n を 0 に向かって整数に丸めるのではなく、最も近い整数に丸める点を除いて似ています。たとえば、drem (6.5, 2.3) は -0.4 を返します。これは 6.5 から 6.9 を引いたものです。
のGNUマニュアルからfmod
:
これらの関数は、分子を分母で割った剰余を計算します。具体的には、戻り値は分子 - n * 分母です。ここで、n は分子を分母で割った商であり、0 に向かって丸められて整数になります。したがって、fmod (6.5, 2.3) は 1.9 を返します。これは 6.5 から 4.6 を引いたものです。
ドキュメントを読むと、次の Python コードが機能するはずです。
def drem(x, y):
n = round(x / y)
return x - n * y
ただし、Pythondrem(1.0, 2.0) == -1.0
と Cではdrem(1.0, 2.0) == 1.0
. 注 Python は負の 1を返し、C は正の 1を返します。これはほぼ確実に、浮動小数点数の丸めにおける内部的な違いです。私が知る限り、両方の関数は同じように実行されますが、それ以外の場合は parameters 2 * x != y
.
drem
Python関数を C と同じように動作させるにはどうすればよいですか?