1. ホーム
  2. c++

[解決済み] 微分積分(%)はなぜ整数のみで動作するのですか?

2023-06-01 16:45:37

疑問点

私は最近 問題 に遭遇しました。これはモジュラス除算を使えば簡単に解決できるのですが、入力がfloatでした。

周期的な関数が与えられた場合(例えば sin ) と、それを周期範囲内 (例えば [-π, π]) でしか計算できないコンピュータ関数がある場合、任意の入力を扱える関数を作成せよ。

"learn"のような解法がある。

#include <cmath>

float sin(float x){
    return limited_sin((x + M_PI) % (2 *M_PI) - M_PI);
}

なぜこれが動作しないのでしょうか?このエラーが出ます。

error: invalid operands of types double and double to binary operator %

興味深いことに、これはPythonで動作します。

def sin(x):
    return limited_sin((x + math.pi) % (2 * math.pi) - math.pi)

どのように解決するのですか?

通常の数学的な余りの概念は、整数の割り算にしか適用できないからです。

余りの概念を実数に拡張するには、新しい種類のハイブリッド演算を導入しなければなりません。 整数 の商を生成する新しい種類の オペランドに対する商 コアC言語ではこのような演算はサポートされていませんが、標準ライブラリとして提供されている fmod 関数と同様に remainder という関数があります。(これらの関数は同じものではなく,いくつかの特殊性があることに注意してください.特に、整数の割り算の丸めルールには従いません)。