Оптимизация математических операций - C#
Формулировка задачи:
Необходимо вычислять большой объем математических операций, состоящий из операций умножения и сложения комплексных чисел.
На входе имеется массив комплексных чисел array и k. Программа выполняет сложение и умножение элементов этих массивов.
Класс Complex выглядит следующим образом:
На данный момент не устраивает время расчета математических операций. Какие пути оптимизации можно применить ?
P.S.В аттаче исходники обоих классов.
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]); }
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)); } }
Решение задачи: «Оптимизация математических операций»
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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д