Как правильно передать в метод массив и получить обратно массив другого размера?
Тебе не нужны new и сырые указатели. Тебе нужен линейный контейнер с хранением элементов в непрерывном блоке памяти. Это будет или std::vector, или std::array.

Для начала можно остановиться на векторе. Еще одним важным типом будет std::span[?] или gsl::span[?][S] если ты не можешь пользоваться C++20.

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

Вот объвление твоей функции: gsl::span<float> Метод( gsl::span<float> values ).
span - это не владеющий памятью тип, обозначающий участок непрерывной памяти с данными определенного типа. span очень легок и является value type - т.е. создан чтобы его передача по значению не приводила к ощутимым нагрузкам. span конструируется из std::vector, std::array, плоских массивов, std::unique_ptr<[]> и сырых блоков памяти.

В своей функции тебе стоит работать с памятью values, считая попутно, сколько элементов ты обработал. А для возврата обработанного участка данных тебе будет достаточно вызвать subspan.

Псевдокодstd::span<float> Метод( std::span<float> values )
{
	size_t processed_count = 0;
	for( float& element : values )
	{
		// ... обработка значений
		// ... изменение processed_count
		// ... условия обрыва цикла
	}
	
	return values.subspan( 0, processed_count );
}

int main()
{
	std::vector<float> values{ 7.83f, 14.1f, 20.3f };
	std::span<float> processed_values = Метод( values );
	
	for( const float& value : processed_values )
	{
		std::cout << value << ' ';
	}
	
	return 0;
}
Первый вариант
1) Вам нужно передать указатель по ссылке, чтобы изменить его значение при выделении памяти с помощью new[]
Метод(float& *arr) {}

2) Вы должны изменить указатель a (из main) по ссылке arr
arr = newArr;

Код:
void foo(float& *arr) {
 // ... использование данных
  delete [] arr;
  float *newArr = new float[newSize];
  //... заполнение новыми данными
  arr = newArr;
}

float *a = new float[size];
foo(a);

Второй вариант
Вернуть из функции новый указатель
float* foo(float *arr) {
 // ... использование данных
  delete [] arr;
  float *newArr = new float[newSize];
//... заполнение новыми данными
  return newArr;
}

float *a = new float[size];
a = foo(a);