Не совсем корректный вывод динамического массива вещественных чисел в C++

Задание заключается в том, что нам дан статический двумерный массив вещественных чисел размерностью 5х5 и нужно вывести все елементы, кроме минимального в новый одномерный динамический массив. Вроде-бы программу я написал, но при выводе она добавляет 2 непонятных новых числа. Вот код:

#include <iostream>
using namespace std;
int main() {
  const int n = 5;
  double arr[n][n] = { {1.0, 2.0,  3.0, 4.0, 5.0}, {1.0, 2.0, 45.0, -6.7, 7.8}, {0.0, -33.3, 4.6, 56.0, 8.9}, {2.1, -3.0, 7.6, -33.3, 11.3}, {1.1, 4.5, 6.8, 8.0, 2.2}};
  float min = arr[0][0];
  int count = 1, id = 0;
  for (int i = 0; i < n; i++){
    for (int j = 0; j < n; j++){
      if (arr[i][j] == min)
      {
        count++;
      }
      if (arr[i][j] < min) {
        min = arr[i][j];
        count = 1;
      }
    }
  }
  int m = n * n - count;
  
  
  float * mPtr = new float [m] ;
  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      if (arr[i][j] > min) {
        mPtr[id] = arr[i][j];
        id++;
      }
    }
  }
  cout << "Array: " << endl;
  for (int i = 0; i <= m; i++)
  {
    cout << mPtr[i] << " ";
  }
   cout << endl;
   delete[] mPtr;

  system("pause");
  return 0;
}```

Соотвественно, вывод должен быть:
1 2 3 4 5 1 2 45 -6.7 7.8 0 4.6 56 8.9 2.1 -3 7.6 11.3 1.1 4.5 6.8 8 2.2  
Но он таков: 
1 2 3 4 5 1 2 45 -6.7 7.8 0 4.6 56 8.9 2.1 -3 7.6 11.3 1.1 4.5 6.8 8 2.2 -4.31602e+08 -4.22017e+37



Ответы (1 шт):

Автор решения: Harry

Замените все float на double. Вы понимаете, что в общем случае при присвоении одного и того же значения это разные величины?

И исправьте

for (int i = 0; i <= m; i++)

на

for (int i = 0; i < m; i++)

Вам же нужно вывести m элементов, а не m+1!

И все заработает: https://ideone.com/PtwJSr

→ Ссылка