2015-04-23 6 views
0

Я объявлял среднее значение double в начале int main(). Этот код компилируется и работает отлично, за исключением того, что когда он вычисляет среднее значение, он возвращает его как int. Целью этого задания было создание и заполнение вектора, затем вычисление среднего значения и поиск медианы. Я застрял в этой части. Есть идеи??C++: почему мое среднее возвращение как int, а не double?

Спасибо, и я ценю любую помощь.

#include <iostream> 
#include <vector> 
#include <cmath> 
#include <numeric> 
using namespace std; 

int main() 
{ 
    int n; 
    double average=0; 

    cout<<"Vector Length?: "<<endl; 
    cin>>n; 
    vector<int> data; 
    srand(time(NULL)); 

    for (int i=0; i<n; i++) 
    { 
     data.push_back(rand()%10+1); 
    } 
    for (int i=0; i<data.size(); i++) 
    { 
     cout<<"Vector: "<<i<<" "<< data[i]<<endl; 
    } 

    average = accumulate(data.begin(), data.end(), 0)/data.size(); 

    cout<<"Average: "<<average<<endl; 

    system ("pause"); 

    return 0; 





} 
+1

http://stackoverflow.com/questions/6101084/division-in-c-not-working-as-expected Вы согласились бы с этим в качестве дубликата? – jogojapan

+0

Возможно, это помогло мне разобраться. Большое спасибо! – DarthVoid

ответ

5

Тип параметр начального значения std::accumulate в настоящее время выводятся как int. Таким образом, результатом накопления является также int, и вы затем выполняете целочисленное деление.

Изменить эту строку в

average = accumulate(data.begin(), data.end(), 0.0)/data.size(); 
//            ^^^ 

Теперь тип, возвращаемый accumulate будет double.

+0

Ahhh .... конечно. Спасибо за помощь! – DarthVoid

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