Średnia i mediana

0

Witam
pisałem funkcję, która pobiera tablicę o nieparzystej liczbie elementów typu int. Program ma zwrócić "mean", "median", lub "same" w zależności od tego czy mediana czy średnia jest większa, lub czy są takie same. Kod poniżej

int compare(const void *a, const void *b)
  {
  return *(int*)a-*(int*)b;
}

const char* meanVsMedian(int *numbers, size_t numbersSize) {
  int median=0;
  double mean=0;
  qsort(numbers,numbersSize,sizeof(int),compare);
  for(int i=0;i<numbersSize;i++)
    mean+=numbers[i];
  mean=mean/numbersSize;
  median=numbers[numbersSize/2];
  return mean>median?"mean":median>mean?"median":"same";
}

Funkcja przechodzi wszystkie testy, ale wcześniej próbowałem zadeklarować mean jako typ int i wyrzucało mi błędy. Myślałem, że dzielenie int przez int zaokrągli wynik w dół. Może ktoś wyjaśnić, dlaczego mean musi być zadeklarowane jako double?

0

Liczenie średniej całkowitej jest trochę bez sensu.
Ale spróbuj zadeklarować mean jako long long int. Każdy int z testu może zjeść zakres zwykłego inta i Twoja suma elementów tablicy będzie niewłaściwa. Double ma więcej bajtów niż int i jakoś łyka taką sumę...

1 użytkowników online, w tym zalogowanych: 0, gości: 1