Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Dynamic;
- using System.Threading;
- using System.Threading.Tasks;
- namespace ConsoleApp1
- {
- class Program
- {
- static double fun(double x)
- {
- double ans = 0;
- for (int k = 1; k <= Math.Max(20, (int)20 * Math.Abs(x)); ++k)
- for (int j = 1; j <= Math.Max(20, (int)20 * Math.Abs(x)); ++j)
- {
- double x_2 = x * x;
- ans += x_2 * (k + j) / (x_2 + k * k * k + j * j * j) * Math.Cos(k * x) * Math.Sin(j * x);
- }
- return ans;
- }
- static void Main()
- {
- const int N = 200;
- List<double> x1 = new List<double>();
- Stack<double> x2 = new Stack<double>();
- Queue<double> x3 = new Queue<double>();
- List<double> y1 = new List<double>();
- Stack<double> y2 = new Stack<double>();
- Queue<double> y3 = new Queue<double>();
- for (int k = 0; k <= N; k++) {
- double val = 100 * Math.Cos(1.0 * k);
- x1.Add(val);
- x2.Push(val);
- x3.Enqueue(val);
- }
- // LIST
- Int64 Tms = (DateTime.Now).Ticks;
- foreach (double x in x1) y1.Add(fun(x));
- Tms = (DateTime.Now).Ticks - Tms;
- TimeSpan Tmss1 = new TimeSpan(Tms);
- Console.WriteLine("List (посл. реализация) "+(Tmss1.TotalSeconds).ToString()+" c");
- Object obj = new Object();
- Tms = (DateTime.Now).Ticks;
- Parallel.ForEach(x1, x => {
- double Tmp = fun(x);
- lock (obj) { y1.Add(Tmp); }
- });
- Tms = (DateTime.Now).Ticks - Tms;
- TimeSpan Tmss2 = new TimeSpan(Tms);
- Console.WriteLine("List (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
- double a = Tmss1 / Tmss2;
- Console.WriteLine("List (ускорение): " + a);
- // STACK
- Tms = (DateTime.Now).Ticks;
- foreach (double x in x2) y2.Push(fun(x));
- Tms = (DateTime.Now).Ticks - Tms;
- Tmss1 = new TimeSpan(Tms);
- Console.WriteLine("Stack (посл. реализация) " + (Tmss1.TotalSeconds).ToString() + " c");
- obj = new Object();
- Tms = (DateTime.Now).Ticks;
- Parallel.ForEach(x2, x => {
- double Tmp = fun(x);
- lock (obj) { y2.Push(Tmp); }
- });
- Tms = (DateTime.Now).Ticks - Tms;
- Tmss2 = new TimeSpan(Tms);
- Console.WriteLine("Stack (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
- a = Tmss1 / Tmss2;
- Console.WriteLine("Stack (ускорение): " + a);
- // QUEUE
- Tms = (DateTime.Now).Ticks;
- foreach (double x in x3) y3.Enqueue(fun(x));
- Tms = (DateTime.Now).Ticks - Tms;
- Tmss1 = new TimeSpan(Tms);
- Console.WriteLine("Queue (посл. реализация) " + (Tmss1.TotalSeconds).ToString() + " c");
- obj = new Object();
- Tms = (DateTime.Now).Ticks;
- Parallel.ForEach(x3, x => {
- double Tmp = fun(x);
- lock (obj) { y3.Enqueue(Tmp); }
- });
- Tms = (DateTime.Now).Ticks - Tms;
- Tmss2 = new TimeSpan(Tms);
- Console.WriteLine("Queue (пар. реализация) " + (Tmss2.TotalSeconds).ToString() + " c");
- a = Tmss1 / Tmss2;
- Console.WriteLine("Queue (ускорение): " + a);
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement