JirR02 88e0b5ed69 Converted everything to orgmode
converted everything to orgmode and added solution to the README files
2025-03-31 08:40:43 +02:00
..
2025-03-31 08:40:43 +02:00

Task 4b: Approximation of Pi: Sum 2

Task

The number \(\pi\) can be defined through various infinite sums. The accuracy increases with the number of terms. Considering the following sum, which we call sum 2:

$$\frac{\pi}{2} = 1 + \sum_{j = 1}^{m - 1} \frac{\prod_{i=1}^j i}{\prod_{i=1}^j (2i + 1)} = 1 + \frac{1}{3} + \frac{1 \cdot 2}{3 \cdot 5} + \frac{1 \cdot 2 \cdot 3}{3 \cdot 5 \cdot 7} + ...$$

Write a program that computes and outputs an approximation of Pi, based on sum 2. The input for your program is the number of terms $m$ (including 1) to be included in the calculation to be done. The output is the approximation of \(\pi\).

Optional: After you have solved this and the previous task, think about which formula gives a more precise approximation of \(\pi\), sum 1 or sum 2 ? What are the drawbacks? Write your thoughts in a comment below the code.

Input

A natural number \(m\) (\(m \geq 1\)).

Output

The approximation of $\pi$ given by $m$ terms, rounded to 6 significant digits. Note that 6 significant digits is the default precision of C++ for printing floating-point values. Use a double variable to store the sum.

Important: the use of functions from the math library (e.g., pow) is prohibited.

Solution

#include <iostream>

double productsumnum(double n) {
  double res = 1;
  for (int j = 1; j <= n; ++j) {
    res *= j;
  }
  return res;
}

double productsumden(double n) {
  double res = 1;
  for (int j = 1; j <= n; ++j) {
    res *= (2 * j + 1);
  }
  return res;
}

int main() {

  double m;      // User Input
  double pi = 2; // Pi
  float res;     // Outputed result with 6 significant digits

  std::cin >> m;

  for (int i = 1; i < m; ++i) {
    pi += (2 * (productsumnum(i) / productsumden(i)));
  }

  res = (float)(pi);
  std::cout << res;

  return 0;
}

Made by JirR02 in Switzerland 🇨🇭