5

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.

dremPython関数を C と同じように動作させるにはどうすればよいですか?

4

2 に答える 2