C++で浮動小数点数の最大公約数(GCD)を求める方法
このチュートリアルでは、浮動小数点数の最大公約数(GCD:Greatest Common Divisor)を求めるC++プログラムについて解説します。
通常、GCDは整数に対して計算されることが多いですが、この記事では小数を含む2つの値が与えられた場合に、そのGCDを求める方法を紹介します。
アルゴリズムの考え方
浮動小数点数のGCDを求めるには、ユークリッドの互除法を応用します。具体的な手順は以下の通りです。
- まず、大きい方の値を
a、小さい方の値をbとするように入れ替えます。 bの絶対値が十分に小さくなった場合(ここでは0.001未満)、その時点のaをGCDとして返します。- そうでなければ、
a - floor(a / b) * bを計算して再帰的に処理を続けます。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
// 与えられた数値のGCDを返す関数
double gcd(double a, double b){
if (a < b)
return gcd(b, a);
if (fabs(b) < 0.001)
return a;
else
return (gcd(b, a - floor(a / b) * b));
}
int main(){
double a = 1.20, b = 22.5;
cout << gcd(a, b);
return 0;
}実行結果
0.3
コードの解説
このプログラムでは、gcd() 関数が再帰的に呼び出されることで、ユークリッドの互除法と同じ仕組みでGCDを求めています。
ポイントとなるのは fabs(b) < 0.001 という条件です。浮動小数点数では誤差が生じるため、厳密なゼロ判定を行わず、一定の閾値(許容誤差)以下になった時点で計算を終了させています。
上記の例では、a = 1.20、b = 22.5 を入力として与えており、実行結果として 0.3 が出力されます。これは、両方の数値を割り切れる最大の値が0.3であることを意味します。
-
3つの数字の中から最大値を見つけるC++プログラム
3つの数値の中から最大のものを求めるには、if文を組み合わせて条件分岐を行うのが基本的な方法です。ここでは、if文を入れ子構造にして最大値を判定するC++プログラムを紹介します。 サンプルコード #include <iostream> using namespace std; int main() { int a = 5 ,b = 1 ,c = 9; if(a>b) { if(a>c) cout<<a<<&quo
-
【Java】2つの数値の最大公約数(GCD)を求めるプログラムの書き方
この記事では、Javaで2つの数値の最大公約数(GCD:Greatest Common Divisor)を求める方法について解説します。最大公約数とは、2つの数値をどちらも余りなく割り切ることができる最大の整数のことです。 GCDの求め方:実行例 以下に具体的な実行例を示します。 入力 入力値が次のとおりであるとします。 値1 : 18 値2 : 24 出力 期待される出力は次のとおりです。 2つの数値のGCD : 6 アルゴリズム GCDを求める基本的な手順は以下のとおりです。 ステップ1 - 開始 ステップ2 - 3つの整数変数 input_1、input_2、gcd を宣言する ステップ