2012-03-07 3 views
-5

Im пытается преобразовать радианы в градусы, но им не получать те же результаты, как GoogleПреобразование радиан в градусы как Google

калькулятор и Pi я определила доцент Выведите все числа.

Если вы наберете в поиске Google: (1 * 180)/3,14159265 тогда вы получите 57.2957796, но моя программа

Выведение: 57,2958 и если вы наберете в Google поиск Pi вы получите : 3,14159265, но мое

выход доцент остальное, это выход: 3,14159

Мой код:

#include <iostream> 
#define SHOW(X) cout << # X " = " << (X) << endl 

using namespace std; 

double Pi_test = 3.14159265; 

float radian_to_degree(double ENTER) { 
    double Pi = 3.14159265; 
    float degrees = (ENTER * 180)/Pi; 
    return degrees; 
} 

int main (int argc, char * const argv[]) { 
    SHOW(radian_to_degree(1)); // 57.2958 not 57.2957795 like google, why? 
    SHOW(Pi_test); // output 3.14159' not 3.14159265, why? 
    return 0; 
} 

Пожалуйста, помогите мне исправить это, что не так? любой пример?

+3

Почему ваша функция возвращает 'float'? – Pubby

+0

Я dident знаю лучший блок для использования. – user1104856

+1

У парней есть «двойная» точность поплавков. Если вы пишете математические функции, сделайте их общими с помощью шаблонов. – Pubby

ответ

1

Как указано here, это может быть, что cout в C++ округляет свой номер перед отображением. Попробуйте это:

#define SHOW(X) cout << setprecision(some_number) << # X " = " << (X) << endl 
+0

Он все еще округляет число перед его отображением ... – user1104856

+0

Хм, мой ответ может быть неправильным ... Я не точно эксперт С, га. Другие работают для вас? – Jwosty

8

Вы должны изменить точность по умолчанию:

cout.precision(15); 
cout << d << endl; 
+0

И верните двойной, как правильно отметил Pubby. –

+0

Все, что происходит, заключается в том, что ответ округлен до определенного десятичного знака, а код J.Ns должен исправить его – Dbz

1

Изменение radian_to_degree работать на double не float, поскольку double имеет более высокую точность.

Выходной результат с помощью std::setprecision

#include <iomanip> 
std::cout << std::setprecision(9) << result << "\n"; 
+0

Ссылка помогла мне получить Идею, спасибо! – user1104856

0

Даже после того, как вы измените точность cout «s, обратите внимание, что double только содержит столько данных; если вы ожидаете, что ваша программа выплюнет 1000 знаков после запятой, то double не собирается вам этого много. Вам придется создать собственный тип данных.

Кроме того, не определяйте макрофункции, если это необходимо.

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