Оптимизация математических операций - C#

Узнай цену своей работы

Формулировка задачи:

Необходимо вычислять большой объем математических операций, состоящий из операций умножения и сложения комплексных чисел. На входе имеется массив комплексных чисел array и k. Программа выполняет сложение и умножение элементов этих массивов.
       static void Main(string[] args)
        {
            //выделение комплексного массива данных
            Complex[] array = new Complex[256];
            Complex[] k = new Complex[256];

            //инициализация массива данных
            for (int i = 0; i < array.Length; i++)
            {
                //заполнение массива произвольными значениями
                array[i] = new Complex(2*i, i * i);
                k[i] = new Complex((float)0.5*i*i, (float)i/10);
            }
 
            Stopwatch stopWatchAll = new Stopwatch();
            stopWatchAll.Reset();
            stopWatchAll.Start();
            //КРИТИЧЕСКАЯ ПО ВРЕМЕНИ СЕКЦИЯ математических операций
            for (int i = 0; i < array.Length; i++)
            {
                //моделирование умножение
                array[i] = array[i] * k[i];
 
                //моделирование сложения
                array[i] = array[i] + k[i];
            }
            stopWatchAll.Stop();
 
            Console.WriteLine("calculation complete with time {0}", stopWatchAll.Elapsed);
 
            //вывод результата
            for (int i = 0; i < array.Length; i++)
                Console.WriteLine(array[i]);
        }
Класс Complex выглядит следующим образом:
 public class Complex
{
 
    public Complex(float real, float imaginary)
    {
        this.real = real;
        this.imaginary = imaginary;
    }
 
    public float Real
    {
        get { return real; }
        set { real = value; }
    }
 
    public float Imaginary
    {
        get { return imaginary; }
        set { imaginary = value; }
    }

    public static Complex operator +(Complex c1, Complex c2)
    {
        return new Complex(c1.Real + c2.Real, c1.Imaginary +
            c2.Imaginary);
    }
 
    public static Complex operator *(Complex c1, Complex c2)
    {
        return new Complex((c1.Real * c2.Real) -
        (c1.Imaginary * c2.Imaginary),
            (c1.Real * c2.Imaginary) + (c1.Imaginary *
            c2.Real));
 
    }
}
На данный момент не устраивает время расчета математических операций. Какие пути оптимизации можно применить ? P.S.В аттаче исходники обоих классов.

Решение задачи: «Оптимизация математических операций»

textual
Листинг программы
            // Warm-up
            var warmup = array[0] * array[0] + array[0];
 
            Stopwatch stopWatchAll = new Stopwatch();
            stopWatchAll.Start();
            //КРИТИЧЕСКАЯ ПО ВРЕМЕНИ СЕКЦИЯ математических операций
            for (int i = 0; i < array.Length; i++)
            {
                //моделирование умножение
                array[i] = array[i] * k[i];
 
                //моделирование сложения
                array[i] = array[i] + k[i];
            }
            stopWatchAll.Stop();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы