ホームページ > バックエンド開発 > C++ > なぜ C ではモジュラスが非整数で機能しないのでしょうか?

なぜ C ではモジュラスが非整数で機能しないのでしょうか?

DDD
リリース: 2024-12-18 12:16:10
オリジナル
455 人が閲覧しました

Why Doesn't Modulus Work with Non-Integers in C?

整数以外のモジュラス除算が失敗する理由

数学では、モジュロ演算子 % で表されるモジュラス除算は、剰余を求めます。ある整数を別の整数で除算し、結果を指定された範囲に事実上「ラップアラウンド」します。ただし、C などのプログラミング言語では、この操作は整数以外のオペランドに対しては機能せず、エラーが発生します。

整数の剰余について

整数の場合、剰余演算は直感的に理にかなっています。たとえば、13 を 5 で割ると、商 2 と余り 3 が得られます。これは、5 が 13 にちょうど 2 回適合し、3 の余りが残るためです。

実数への拡張数値

剰余の概念を浮動小数点数、またはより一般的には実数に拡張すると、次のようになります。合併症。 5.2 を 2.3 で割ることを考えてみましょう。数学的には、結果は約 2.2609 になります。ただし、モジュラス演算子をオペランドに直接適用すると、異なる結果が得られます。

C では、オペランドが整数ではないため、5.2 % 2.3 はコンパイラ エラーになります。これは、C 標準では実数の整数商を計算するハイブリッド演算が定義されていないためです。

標準ライブラリ関数

この問題に対処するために、C 標準ではライブラリは 2 つの関数を提供します: fmod と剰余.

  • fmod: 浮動小数点除算の剰余を計算しますが、整数除算の丸め規則に従いません。
  • 剰余: C99 で導入され、整数の除算の丸めに従って剰余を計算します。

指定されたコード サンプルの問題を解決するには、fmod 関数を使用できます。

fmod 関数はオペランドが同じであることを期待していることに注意してください。型なので、必要に応じて double にキャストする必要があります。

以上がなぜ C ではモジュラスが非整数で機能しないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート