R9490/homework246cd7a1d9836master
README.md
HOMEWORK 2 |
____________ |
Students: Carlo Peruzzo Alexis Saez Uribe
Purpose of the code: i) compute the arithmetic series i.e. the sum of the first N natural numbers ii) compute the estimation of pi=3.14...
Structure of the code: -Series class is containing the classes to compute i) and ii) -DumperSeries class is containing the classes to print to a file or to screen
EXERCISE 1 1)How to compile the code: -open a shell in the location of your local repository and execute the following commands:
mkdir build cd build ccmake ../
Then the GUI should launch. -Hit 'c' to configure. -Hit 'enter' to edit the variable CMAKE_BUILD_TYPE. -Write 'Debug'. -Hit 'enter' to confirm. -Hit 'c' to configure. -Hit 'g' to generate. -Type the following command: make
2)How to run: -Type the following command: ./src/homework2.exe
EXERCISE 2
- What is the best way/strategy to divide the work among yourselves?
We can take advantage of the concept of interfaces in C++ and define the mother class "Series" and the daughter classes "ComputeArithmetic" and "ComputePi", in a header file. In this way we define the members and methods of these classes, without implementing the methods but rather defining just the inputs/arguments and outputs expected by them. After, we can easily split the work and collaborate; being clear how to use the functions, we can either implement the functions in a .cpp file or use the functions in the main.cc file. Specifically for this exercise, one of us is going to implement the "compute" function of "ComputeArithmetic" class and its corresponding call from "main.cc", and the other one same tasks but for "ComputePi".
EXERCISE 3
- For PrintSeries objects, dump method prints on the screen steps of the series/sumation (Arithmetic or Pi) at the frequency defined by the user.
- For WriteSeries objects, dump method write in a file (possible extensions: .csv .txt .psv) all the steps of the series/sumation (Arithmetic or Pi) plus the analytical solution in the case of Pi.
- Please note that you should have python installed to use the plot function called "plotnumeric.py". This plot function is automatically called from the c++ code, in case it does not work, you can also execute it by this command:
python plotnumeric.py "../../adress/of/the/file/to/read"
In order to use this python function, you should read only the files that have been generated from our c++ code. The plot function works only for files generated from "ComputePi" series, in the case of "ComputeArithmetic" no plot is generated (because concept of convergence does not make sense in this case).
EXERCISE 5
- Complexity of the program
Before doing this exercise, the global complexity of the program was governed by a "nested for loop", meaning that the complexity is in the order of N^2 where N is the number of terms of the series/summation.
- Complexity of the program after using current_index and current_value variables in order to prevent re-computation
Now, the global complexity is governed a "single for loop", since we are re-using the terms of the summation preciously computed when writing or printing the results, meaning that the complexity is in the order of N.
- In the case you want to reduce the rounding errors over floating point operation by summing terms reversely, what is the best complexity you can achieve ?
Depending on the precision requested and the number of terms (N) in the Pi Series, the last terms of the summation might be adding values that are less than the precision needed, so we can actually compute as first step the number of terms that are relevant and then compute only these terms. By doing this, we are not modifying the complexity of the algorithm, but rather reducing the number of operations due to we decrease the number of terms of the summation. In addition, summing reversely does not modify the complexity of the algorithm.