コードに通常の分数を入力すると、なぜ無限の値が返されるのか、一生理解できません。GCD (最大公約数) 以外はすべて機能しているようです。
この中に露骨に明らかな論理エラーがありますか?
私は調査を行い、質問に対するさまざまな回答を見つけました。つまり、ウィキペディアはそれを行うためのコードを提供していますが、現在のようにコーディングした方法で機能させる方法を理解したいと思います.
#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <math.h>
using namespace std;
class Fraction
{
private:
double num;
double den;
double fraction;
double temp;
public:
void setNum();
void setDen();
int getNum();
int getDen();
void lcdOutput();
void decOutput();
int gcd();
};
void Fraction::setNum(){
cout << "Enter a value for your numerator: " << endl;
cin >> num;
}
void Fraction::setDen(){
cout << "Enter a value for your denominator: " << endl;
cin >> den;
}
int Fraction::getNum(){
return num;
}
int Fraction::getDen(){
return den;
}
int Fraction::gcd(){
Fraction set;
if(num > den){
if(fmod(num, den) == 0){
den = temp;
return temp;
}
else{
den = fmod(num, den);
set.gcd();
}
}
else{
if(fmod(den, num) == 0){
num = temp;
return temp;
}
else{
num = fmod(den, num);
set.gcd();
}
}
}
void Fraction::lcdOutput(){
Fraction set;
set.gcd();
num = num / temp;
den = den / temp;
cout << "Fraction in lowest terms: " << num << "/" << den << endl;
}
void Fraction::decOutput(){
double decimal = num / den;
cout.precision(4);
cout << "The fraction in decimal form is: " << decimal << endl;
}
int main(){
Fraction set;
set.setNum();
set.setDen();
set.getNum();
set.getDen();
set.lcdOutput();
set.decOutput();
return 0;
}