Cálculo Paralelo de PI usando OpenMP e o método de Gregory-Leibniz

OpenMP Mini Reference Guide clique aqui.

O número π\pi pode ser aproximado por diferentes métodos numéricos. Um método muito interessante foi proposto por Leibniz, filósofo e matemático famoso que é considerado, junto de Newton, como o pai do cálculo. Ambos são contemporâneos, mas nunca trabalharam juntos e desenvolveram partes diferentes, sendo Leibniz o principal responsável pela notação moderna.

Leibniz notou que a relação do π\pi com uma integral e, como toda integral, calcula a área sob uma curva somando partes infinitesimalmente pequenas.

π4=0111+x2dx=k=0(1)k2k+1\frac{\pi}{4} = \int_{0}^{1} \frac{1}{1+x^2} \, dx = \sum_{k=0}^{\infty} \frac{(-1)^k}{2k+1}

Desta forma, podemos calcular π\pi somando muitos termos desse somatório. O somatório acima foi primeiramente descoberto pelo matemático indiano Madhava de Sangamagrama, entre o século 14 e 15. Posteriormente, ela foi independentemente descoberta por James Gregory (1671) e Leibniz (1673). Gregory, que também é muito importante para o desenvolvimento do Cálculo, e por isso essa série é chamada de Gregory-Leibniz na cultura ocidental. A partir deste somatório, geramos a seguinte série infinita:

π4=113+1517+19...\frac{\pi}{4} = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} ...

π=4(113+1517+19...)\pi = 4 (1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} ...)

Neste exercício, iremos calcular o valor de pi com a série acima, recebendo como entrada o número de termos a serem utilizados. No entanto, podemos utilizar muitos termos e, obrigatoriamente, devemos usar o paralelismo. Você deverá desenvolver um programa utilizando OpenMP para calcular uma aproximação de π\pi, de forma paralela, distribuindo o trabalho entre múltiplas threads.

Entrada

A entrada possui o número NN de frações que devemos utilizar (2N211)(2 \leq N \leq 2^11).

Saída

A saída deve possuir o número de aproximado de π\pi, com 11 casas decimais.

Restrições

Exemplo de Entrada 1

1

Exemplo de Saída 1

4.00000000000

Exemplo de Entrada 2

2

Exemplo de Saída 2

2.66666666667

Exemplo de Entrada 3

3

Exemplo de Saída 3

3.46666666667

Exemplo de Entrada 4

4

Exemplo de Saída 4

2.89523809524