Как в C ++ вычислить среднее значение вектора целых чисел с помощью векторного представления и gsl_stats_mean?

моя программа манипулирует векторами STL целых чисел , но время от времени мне нужно вычислять некоторые статистические данные по ним. Поэтому я использую функции GSL . Чтобы избежать копирования вектора STL в вектор GSL, я создаю векторное представление GSL и передаю его функциям GSL, как в этом фрагменте кода:

#include <iostream>
#include <vector>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_statistics.h>
using namespace std;

int main( int argc, char* argv[] )
{
  vector<int> stl_v;
  for( int i=0; i<5; ++i )
    stl_v.push_back( i );

  gsl_vector_int_const_view gsl_v = gsl_vector_int_const_view_array( &stl_v[0], stl_v.size() );

  for( int i=0; i<stl_v.size(); ++i )
    cout << "gsl_v_" << i << "=" << gsl_vector_int_get( &gsl_v.vector, i ) << endl;

  cout << "mean=" << gsl_stats_mean( (double*) gsl_v.vector.data, 1, stl_v.size() ) << endl;
}

После компиляции (gcc -lstdc ++ -lgsl -lgslcblas test.cpp), этот код выводит следующее:

gsl_v_0=0
gsl_v_1=1
gsl_v_2=2
gsl_v_3=3
gsl_v_4=4
mean=5.73266e-310

Векторное изображение создано правильно, но я не понимаю, почему неверно среднее значение (оно должно быть равно 10/5 = 2). Есть идеи? Заранее спасибо.

7
задан tflutre 31 January 2011 в 15:57
поделиться