Здравствуйте! Передо мной стоит следующая задача: написать на C++ метод, вычисляющий НОД для 2 чисел типа int ИЛИ double(класс шаблонный).
Взял алгоритм Евклида с небольшими изменениями:
template <typename T>
T rational<T>::nod(T a, T b) {
if (a == b) {
return a;
}
if (a > b) {
T tmp = a;
a = b;
b = tmp;
}
return nod(a, b - a);
}
Работает при:
rational<double> rat(5, 10);//рациональная дробь 5/10
rat.nod(5, 10);//вычисление НОД 5 и 10
И не работает при:
rational<double> rat(5.1, 10);//рациональная дробь 5/10
rat.nod(5.1, 10);//вычисление НОД 5.1 и 10
Вопрос: почему так происходит, и как это исправить, чтобы работало в обоих вариантах? Заранее спасибо за ответы!
Сборка персонального компьютера от Artline: умный выбор для современных пользователей