2015-03-31 4 views
1

У меня есть две функции как часть большей функции, которую я пишу как упражнение. Целью этих функций является преобразование температур от Фаренгейта до Цельсия и наоборот.двойная функция только возврат -0

Я начинаю с:

#include <iostream> 
using namespace std; 
double Celsius_to_Fahrenheit(double); 
double Fahrenheit_to_Celsius(double); 

Цельсия, к-Fahrenheit работает отлично:

double Celsius_to_Fahrenheit(double C){ 
    double F = ((9/5)*C + 32); 
    return F; 
} 

Но функция Фаренгейта к Цельсию возвращает -0 независимо от того, какой аргумент он принимает:

double Fahrenheit_to_Celsius(double F){ 
    double C = ((5/9)*(F - 32)); 
    return C; 
} 

Что случилось со вторым? Я не вижу разницы в структуре, которая заставит работать, а не другую.

Редактировать: Я только проверял функции на 0, обе функции ломаются для нетривиальных аргументов! Это еще хуже!

+7

Добро пожаловать в мир целочисленного деления. Попробуйте 'double C = ((5.0/9.0) * (F - 32.0));'. – Phylogenesis

+4

Функция Celsius-to-Fahrenheit также не работает. – user2357112

+1

@ user2357112 Я тестировал его только на ноль! Дурак я! – GFauxPas

ответ

4

На самом деле я считаю, что функции BOT не работают. Вы просто не заметили, что C-to-F терпит неудачу, потому что вы получаете ненулевой результат.

В C++ тип результата результата деления зависит от типа операндов, а не от типа, который наиболее точно отражает результат. Другими словами, 5/9 - это целочисленное деление и будет усечено до 0. Если вы используете что-то вроде 5.0/9.0, он будет делать математику как двойную точность и, скорее всего, даст вам результат, который вы хотите.

Если же вы довольны усеченного результате вы можете просто изменить условия, чтобы сделать это сделать закругления, как в конце возможного: double C = ((F - 32) * 5/9);

Смежные вопросы