Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
4 / 3 / 2
Регистрация: 04.03.2016
Сообщений: 73
1

Реализация многопоточного вычисления числа Pi

29.05.2016, 18:16. Просмотров 1915. Ответов 2
Метки нет (Все метки)

Написать программу, реализующую многопоточное вычисление числа https://www.cyberforum.ru/cgi-bin/latex.cgi?\pi по приближенному алгоритму: https://www.cyberforum.ru/cgi-bin/latex.cgi?\pi /4\approx 1-1/3+1/5-1/7+... , количество слагаемых и потоков задает пользователь. Построить зависимость времени расчета (при одном и том же количестве слагаемых) от числа потоков. При данном числе потоков произвести несколько запусков программы, сравнить результаты.
С потоками ни разу дело не имел, хотелось бы чтобы привели элементарный пример, похожий на это задание, и объяснили как задается количество потоков пользователем.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2016, 18:16
Ответы с готовыми решениями:

Реализация многопоточного приложения
Добрый день. У меня есть небольшое приложение, которое должно использовать строго определенное...

Создание многопоточного приложения, для вычисления числа «пи» с максимальной точностью после запятой.
Доброго всем времени суток! Пишу по методичке программу для вычисления числа «пи» с максимальной...

Оптимальная реализация многопоточного приложения
Несколько простоватая проблема. Есть приложение, в нём пользователь запускает длительный процесс, и...

Распараллеливание алгоритма и реализация многопоточного приложения
Ребята, нужна помощь! Есть код, который осуществляет сдвиг элементов одномерного массива вправо: ...

2
5980 / 2106 / 737
Регистрация: 10.12.2010
Сообщений: 5,923
Записей в блоге: 3
08.06.2016, 10:13 2
Лучший ответ Сообщение было отмечено MaxSta как решение

Решение

Условие понял плохо. В общем наговнокодил следующим образом. Идея в том, чтобы изначально иметь массив целых чисел. Число элементов это число потоков для независимого расчета. Значение в ячейке -- число итераций (т.е. число слагаемых) для соответствующего потока.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        int a[] = {2000, 3000, 40000, 150, 789, 666, 6, 10000};
        
        Calculator calc = new Calculator(a);
        
        calc.Execute();
        
        System.out.println(calc);
    }
}
Java
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
public class Calculator {
    
    private ArrayList<PiCalculatorUnit> calculatorsList;
    private ArrayList<Double> results;
    
    public Calculator(final int iterationsArray[])
    {
        calculatorsList = new ArrayList<PiCalculatorUnit>(iterationsArray.length);
        results = new ArrayList<Double>(iterationsArray.length);
        
        for (int i = 0; i < iterationsArray.length; i++)
        {
            calculatorsList.add(new PiCalculatorUnit(iterationsArray[i]));
        }
    }
    
    public void Execute()
    {
        ExecutorService executor = Executors.newFixedThreadPool(calculatorsList.size());
        
        try {
            ArrayList<Future<Double>> results = (ArrayList<Future<Double>>) executor.invokeAll(calculatorsList);
            
            for (int i = 0; i < results.size(); i++)
            {
                if (results.get(i).isDone())
                {
                    this.results.add(results.get(i).get());
                }
                else
                {
                    this.results.add(0.0);
                }
            }
            
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
    
    public String toString()
    {
        StringBuilder builder = new StringBuilder();
        
        Formatter formatter = new Formatter(builder, Locale.US);
        
        for (int i = 0; i < calculatorsList.size(); i++)
        {
            formatter.format("Thread %3d : iterations = %8d, PI = %.15f\n", i + 1,
                    calculatorsList.get(i).getIterationCount(), results.get(i));
        }
        formatter.close();
        
        return builder.toString();
    }
}
Java
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
public class PiCalculatorUnit implements Callable<Double> {
    private int N;
    
    public PiCalculatorUnit(final int iterationsCount)
    {
        N = iterationsCount;
    }
    
    public Double call()
    {
        double result = 0.0;
        double nominator = 1.0;
        double denominator = 1.0;
        
        for (int i = 0; i < N; i++)
        {
            result = result + nominator / denominator;
            nominator = nominator * (-1.0);
            denominator = denominator + 2.0;            
        }
        
        result = result * 4.0;
        
        return new Double(result);
    }
    
    public int getIterationCount()
    {
        return N;
    }
}
1
4 / 3 / 2
Регистрация: 04.03.2016
Сообщений: 73
08.06.2016, 13:53  [ТС] 3
Спасибо, в выходные буду разбираться.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2016, 13:53

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

Реализация многопоточного приложения для обработки матрицы
Написать код программы на C#. В основном потоке случайным образом генерируется матрица из N-строк...

Разработать программу для многопоточного вычисления суммы матриц (OpenMP)
Добрый день всем! Задание такое: Разработать программу для многопоточного вычисления суммы матриц...

Программа вычисления числа простых делителей натурального числа М, не являющихся в то же время делителями числа N
В идеале нужен нужно написать метод: Составьте программу вычисления числа простых делителей...

Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k
Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.