У меня есть код, чтобы сравнить два класса дробей, мои операторы класса нижеДробь Булевы операторы
// Equal to (==)
bool Fraction::operator == (const Fraction &fraction){
if (static_cast<double>(numerator/denominator) == static_cast<double>(fraction.numerator/fraction.denominator)){
return true;
} else {
return false;
}
} // End of == operator
.
.
.
. // And so on for all other comparisons
Однако мой выход возвращает операторов (==), (< =) и (> =), говоря, что все они верны.
В моей основной()
// EQUAL TO
if (fraction1 == fraction2){
cout << fraction1.toString() << " is equal to " << fraction2.toString() << "." << endl;
}
.
.
. // And so on...
Я также попытался if (fraction1.operator==(fraction2)){
вместо if (fraction1 == fraction2)
но они оба возвращают то же самое. Я застрял на этом, может быть, что-то не так с моей логикой? При необходимости я могу отправить больше кода. Благодаря!
Редактировать: static_cast должно быть двойным. Числители и знаменатели являются целыми числами, а в моих методах сеттера и геттера они являются целыми числами.
Конечно основная математика бы предположить, что условие равенства 'a.numerator * b.denominator == a.denominator * b.numerator', без разделения, учитывая, что это * определение * рационального число? –
Кроме того, почему 'double' с одной стороны и' float' с другой? –
Если числитель и знаменатель являются int, вы можете столкнуться с целыми делениями. Вы должны бросить в floats/doubles * before * diving (или просто использовать технику умножения выше). – IanPudney