Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 23.02.2011
Сообщений: 69

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

28.02.2013, 10:20. Показов 3529. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо вычислять большой объем математических операций, состоящий из операций умножения и сложения комплексных чисел.

На входе имеется массив комплексных чисел array и k. Программа выполняет сложение и умножение элементов этих массивов.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
       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 выглядит следующим образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 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.В аттаче исходники обоих классов.
Вложения
Тип файла: rar testMath.rar (2.0 Кб, 4 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2013, 10:20
Ответы с готовыми решениями:

Оптимизация I/O операций для работы с большими текстовыми файлами (1Гб+)
Доброго времени суток. Подскажите каким образом можно оптимизировать I/O операций для работы с большими текстовыми файлами (1Гб+) ...

Перегрузки операций для математических векторов в двумерном пространстве
Доброго времени суток) Написана программа для перегрузки операций(для математических векторов в двумерном пространстве): + (сума...

Написать калькулятор, производящий 4 или 5 математических операций с тремя (или больше) дробными числами
Помогите пожалуйста написать калькулятор, производящий 4 или 5 математических операций с тремя(или больше) дробными числами. ...

21
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.02.2013, 21:22
Студворк — интернет-сервис помощи студентам
vekser, вот, может вам интересно будет, выложите результаты своих тестов)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
using System;
using System.Diagnostics;
 
namespace Test
{
    public struct Result
    {
        public long Time;
        public long Ticks;
    }
 
    public struct MyFieldStruct
    {
        public int Val;
        public string Name;
 
        public MyFieldStruct(int i, string s)
        {
            Val = i;
            Name = s;
        }
    }
 
    public struct MyPropStructWithBackingField
    {
        private int _val;
        private string _name;
        public int Val
        {
            get { return _val; }
            set { _val = value; }
        }
 
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
 
 
        public MyPropStructWithBackingField(int i, string s)
        {
            _val = i;
            _name = s;
        }
    }
 
    public struct MyPropStruct
    {
        public int Val { get; set; }
 
        public string Name { get; set; }
 
        public MyPropStruct(int i, string s)
            : this()
        {
            Val = i;
            Name = s;
        }
    }
 
    public class MyFieldClass
    {
        public int Val;
        public string Name;
 
        public MyFieldClass(int i, string s)
        {
            Val = i;
            Name = s;
        }
    }
 
    public class MyPropClass
    {
        public int Val { get; set; }
 
        public string Name { get; set; }
 
        public MyPropClass(int i, string s)
        {
            Val = i;
            Name = s;
        }
    }
 
    internal class Program
    {
        private static void Main()
        {
            Result result1, result2, result3, result4, result5;
            const int n = 500000000;
 
            {
                var start = new Stopwatch();
                start.Start();
                for (int i = 0; i < n; ++i)
                {
                    var cl1 = new MyFieldClass(55, "mami");
                    cl1.Name = "papi";
                    cl1.Val = 555;
                    cl1.Name = "mami";
                    cl1.Val = 55;
                }
                result3.Ticks = start.ElapsedTicks;
                result3.Time = start.ElapsedMilliseconds;
                GC.Collect();
            }
 
            {
                var start = new Stopwatch();
                start.Start();
                for (int i = 0; i < n; ++i)
                {
                    var cl2 = new MyPropClass(55, "mami");
                    cl2.Name = "papi";
                    cl2.Val = 555;
                    cl2.Name = "mami";
                    cl2.Val = 55;
                }
                result4.Ticks = start.ElapsedTicks;
                result4.Time = start.ElapsedMilliseconds;
                GC.Collect();
            }
 
            {
                var start = new Stopwatch();
                start.Start();
                for (int i = 0; i < n; ++i)
                {
                    var st1 = new MyFieldStruct(55, "mami");
                    st1.Name = "papi";
                    st1.Val = 555;
                    st1.Name = "mami";
                    st1.Val = 55;
                }
                result1.Ticks = start.ElapsedTicks;
                result1.Time = start.ElapsedMilliseconds;
                GC.Collect();
            }
 
            {
                var start = new Stopwatch();
                start.Start();
                for (int i = 0; i < n; ++i)
                {
                    var st2 = new MyPropStruct(55, "mami");
                    st2.Name = "papi";
                    st2.Val = 555;
                    st2.Name = "mami";
                    st2.Val = 55;
                }
                result2.Ticks = start.ElapsedTicks;
                result2.Time = start.ElapsedMilliseconds;
                GC.Collect();
            }
 
            {
                var start = new Stopwatch();
                start.Start();
                for (int i = 0; i < n; ++i)
                {
                    var st2 = new MyPropStructWithBackingField(55, "mami");
                    st2.Name = "papi";
                    st2.Val = 555;
                    st2.Name = "mami";
                    st2.Val = 55;
                }
                result5.Ticks = start.ElapsedTicks;
                result5.Time = start.ElapsedMilliseconds;
                GC.Collect();
            }
 
 
 
            Console.WriteLine("MyFieldStruct milliseconds = {0} , ticks = {1}", result1.Time, result1.Ticks);
            Console.WriteLine("MyPropStruct milliseconds = {0}, ticks = {1}", result2.Time, result2.Ticks);
            Console.WriteLine("MyFieldClass milliseconds = {0}, ticks = {1}", result3.Time, result3.Ticks);
            Console.WriteLine("MyPropClass milliseconds = {0}, ticks = {1}", result4.Time, result4.Ticks);
            Console.WriteLine("\nMyPropStructWithBackingField milliseconds = {0}, ticks = {1}", result5.Time, result5.Ticks);
            Console.ReadKey();
        }
 
    }
}
0
1 / 1 / 0
Регистрация: 23.02.2011
Сообщений: 69
04.03.2013, 18:13  [ТС]
Все же установил MVS 2010 попробовать встроенный complex.
Результаты разнятся с 2008
1. Complex класс - 250 попугаев
2. Complex структура - 90 попугаев
3. встроенный complex - 60 попугаев.


В 2008 структура проигрывала классы на 10-20%.

Кто-нибудь сможет прокомментировать ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2013, 18:13

Обработать ситуацию, чтобы с пустым texbox'ом математических операций не проводилось
Добрый день! Имеются несколько textbox'ов, которые могут быть и пустыми. Есть кнопка, которая производит математические операции с...

осуществление математических операций
а можно ли осуществлять со столбцами математическме операции (или с отдельными ячейками)??? допустим есть столбец цен на товар и нужно...

Использование математических операций
&lt;? $a=4; $b=3; $x=x; $y=y; $F=$a*$x+$y*$b; { echo $F; }

Изменение приоритета математических операций
Здравствуйте, по заданию в лабораторной, нужно написать программу которая будет вычислять значение математического выражения с заданным...

Реализовать указатель на любую из функций математических операций
Написать четыре функции, которые + - * / два числа Указатель на ф-ю (может принять адрес любой выше указанной функции) Через указатель...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru