C++のremainder()関数とは?使い方・構文・サンプルコードを徹底解説
この記事では、C++のremainder()関数の仕組み、構文、具体的な使用例について詳しく解説します。
remainder()関数とは?
remainder()関数は、C++の標準ライブラリに組み込まれた数学関数の一つで、<cmath>ヘッダーファイル内で定義されています。この関数は、指定された2つの引数(分子と分母)の剰余を求めるために使用されます。
関数は2つの引数を受け取り、その剰余を計算した後、最も近い整数に丸められた浮動小数点数として結果を返します。
内部的には、以下の式で計算が行われます。
remainder = numerator – roundquot * denominator;
ここで、「remainder」は計算結果の値、「numerator」が第1引数(分子)、「denominator」が第2引数(分母)、「roundquot」は分子÷分母の商を最も近い偶数に丸めた値を表します。
なお、類似の関数である fmod() は商をゼロ方向へ丸めて剰余を求めるのに対し、remainder()はIEEE 754規格に基づき偶数への丸めを行う点が大きな違いです。
構文
double remainder(double numerator, double denominator);
パラメータ
この関数は以下の引数を受け取ります。
- numerator(分子) − 割られる数(商の分子)となる値。
- denominator(分母) − 割る数(商の分母)となる値。
戻り値
この関数は、分子と分母の剰余を返します。
- 分子が0の場合 → 戻り値も0になります。
- 分母が0の場合 → 0を返すか、ドメインエラー(domain error)が発生します。
入力例
remainder(51, 5);
出力例
1
サンプルコード①:基本的な使い方
#include <cmath>
#include <iostream>
using namespace std;
int main(){
int numerator = 51;
int denominator = 5, remainder_ans;
remainder_ans = remainder(numerator, denominator);
cout<<"Value of Remainder is " <<numerator << "/" << denominator << " is: " << remainder_ans << endl;
return 0;
}
実行結果
上記のコードを実行すると、次の出力が得られます。
Value of Remainder is 51/5 is: 1
51 ÷ 5 の商は10.2であり、これを最も近い偶数(10)に丸めると、剰余は 51 − 10 × 5 = 1 となります。
サンプルコード②:分母が0の場合
// 分母が0の場合の出力を確認する例です。
#include <cmath>
#include <iostream>
using namespace std;
int main(){
int numerator = 51;
int denominator = 0, remainder_ans;
remainder_ans = remainder(numerator, denominator);
cout<<"Value of Remainder is "<< numerator << "/" << denominator << " is: " <<
remainder_ans << endl;
return 0;
}
実行結果
上記のコードを実行すると、次のような出力になります。
Value of Remainder is 51/0 is: -2147483648 //garbage value
分母に0を指定すると、計算が定義されないため、環境によっては上記のように不正な値(ガベージ値)が出力されたり、ドメインエラーが発生したりします。実際のプログラムでは、分母が0にならないよう事前にチェックすることを推奨します。
まとめ
C++のremainder()関数は、<cmath>ヘッダーで提供される剰余計算用の関数です。fmod()との違いは丸め方法にあり、remainder()は商を最も近い偶数に丸めるため、より対称性の高い結果が得られます。浮動小数点演算を伴う科学技術計算などで活用できる便利な関数なので、ぜひ使いこなしてみてください。
-
C++プログラムにおける二分探索(バイナリサーチ)の基本と実装
二分探索(バイナリサーチ)とは二分探索は「半区間探索」「対数探索」「バイナリチョップ」とも呼ばれる検索アルゴリズムで、ソート済みの配列の中から目的の値が存在する位置を効率的に見つけ出します。基本的な仕組みは非常にシンプルです。まず、探したい値(ターゲット値)を配列の中央の要素と比較します。一致しなかった場合は、ターゲット値が存在し得ない半分を丸ごと排除し、残りの半分に対して同様の比較を繰り返します。この「中央との比較」と「範囲の絞り込み」を続け、ターゲット値が見つかるか、検索範囲が空になる(=配列にその値が存在しない)かのどちらかで処理が終了します。アイデア自体は簡単ですが、正しく実装するには
-
C++プログラムの基本構造を徹底解説!Hello Worldで学ぶ入門
C++プログラムの基本構造とは プログラミング言語を効率よく習得する最良の方法は、実際にプログラムを書いてみることです。初心者が最初に書くプログラムとして定番なのが、「Hello World」という文字列を画面に表示するだけのシンプルなプログラムです。ごく簡単な内容ですが、C++プログラムに必要な基本的な構成要素がすべて詰まっています。それでは、さっそくコードを見てみましょう。 #include<iostream> int main() { std::cout << Hello World\n; } ここからは、このプログ