2013-03-10 2 views
1

Это моя программа:Программа C++ Выведение Неверный номер

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

double areaofcircle(double r) 
{ 
return 3.14 * r * r; 
} 

int main() 
{ 
cout << areaofcircle(5); 
} 

я должен получать выход «78,5», но я получаю «78.512». Что происходит?! Я также пробовал float, но я все равно получаю тот же результат.

Кроме того, просто вопрос стороны, мне действительно нужно добавить «return 0;» к основной функции?

Еще один вопрос, мне нужно написать «using namespace std;» внутри каждой функции, или я могу просто написать ее за пределами всего, например, как я это делал.

+0

Возможный дубликат http://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples – Aiias

+0

http://stackoverflow.com/questions/554063/how-do-i-print-a-double- value-with-full-precision-using-cout –

+0

Попробуйте изменить '3.14' на' 3.14d' – Patashu

ответ

1

Вы передаете литерал для целого числа (5), поэтому где-то требуется неявное преобразование, чтобы превратить его в двойное. Вам будет лучше пропустить 5.0. Значение по умолчанию для C++ по умолчанию не требует спецификатора, поэтому ваш 3.14 в порядке. (с указанием float требуется 3.14f). Тем не менее, я пробовал оба с 5 и 5,0 и получил 78,5 оба раза на моем компиляторе.

Как вы используете пространство имен std в порядке, но, как указано, оно привносит в стандартное пространство стандартное пространство имен. Я вижу это в учебном материале. Лучше всего использовать using std::cout;

или просто явно добавить std :: cout для всех целей. Тем не менее, нет ничего «неправильного» с точки зрения компиляции в том, как вы это сделали.

1

Я думаю, что вы делаете что-то неправильно. Я пробовал то же самое в компиляторе GCC, и я получаю 78,5. Какой компилятор вы используете?

Что касается других ваших вопросов

  1. Это всегда хорошая идея, чтобы вернуть состояние вашей программы от основной. Обычно вы можете вернуть EXIT_SUCCESS, если все работает нормально, иначе вы можете вернуть EXIT_FAILURE.

  2. Нет необходимости включать в него пространство имен std. Вместо этого плохой практикой является загрязнение вашего стандартного пространства имен. Вы должны включать только те функции, которые вы используете очень часто.

Чтобы узнать больше о C++. Проверьте это link

Надеюсь, что это поможет.

1

Пробовал несколько экспериментов на VS 2008, чтобы узнать, могу ли я получить аналогичную ошибку. Меняя pi на float, я получаю 78.500002622604370, который отличается, но не такой, как ваша проблема. Но я получаю 78,5, когда pi является двойным.

Я бы порекомендовал вам сообщить нам, какой компилятор и версия вы используете, тогда, возможно, кто-то сможет помочь.

#include "stdafx.h" 
#include <iostream> 
const double pi = 3.14; 


double areaofcircle(double r) 
{ 
    return pi * r * r; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    double temp = areaofcircle(5); 
    std::cout << temp; 
    return 0; 
} 
Смежные вопросы