В основном что-то должно выполнить преобразование каждого значения. Не существует неявного преобразования между двумя типами массивов, потому что код, используемый для их обработки после JITting, будет другим - у них будет другой размер элемента, и float будет нуждаться в преобразовании, тогда как double не будет. Сравните это с ковариацией массива для ссылочных типов, где не требуется преобразований при чтении данных (например, битовая комбинация одинакова для строковой ссылки как ссылки на объект), а размер элемента одинаков для всех ссылочных типов.
Короче говоря, что-то должно будет выполнять преобразования в цикле. Я не знаю каких-либо встроенных методов для этого. Я уверен, что они где-то существуют в сторонних библиотеках, но если вы уже не используете одну из этих библиотек, я бы просто написал свой собственный метод. Для удобства, вот пример реализации:
public static double[] convertFloatsToDoubles(float[] input)
{
if (input == null)
{
return null; // Or throw an exception - your choice
}
double[] output = new double[input.length];
for (int i = 0; i < input.length; i++)
{
output[i] = input[i];
}
return output;
}