diff --git a/ex1/ABCEFG/skalar_stl/.swo b/ex1/ABCEFG/skalar_stl/.swo new file mode 100644 index 0000000..c60ad69 Binary files /dev/null and b/ex1/ABCEFG/skalar_stl/.swo differ diff --git a/ex1/ABCEFG/skalar_stl/.swp b/ex1/ABCEFG/skalar_stl/.swp new file mode 100644 index 0000000..e1166b6 Binary files /dev/null and b/ex1/ABCEFG/skalar_stl/.swp differ diff --git a/ex1/ABCEFG/skalar_stl/main.GCC_ b/ex1/ABCEFG/skalar_stl/main.GCC_ new file mode 100755 index 0000000..d4ba575 Binary files /dev/null and b/ex1/ABCEFG/skalar_stl/main.GCC_ differ diff --git a/ex1/ABCEFG/skalar_stl/main.cpp b/ex1/ABCEFG/skalar_stl/main.cpp index ba34d8b..d2bd2b0 100644 --- a/ex1/ABCEFG/skalar_stl/main.cpp +++ b/ex1/ABCEFG/skalar_stl/main.cpp @@ -13,7 +13,7 @@ #include using namespace std; -static void task_a() { +void task_a() { printf("\n\n-------------- Task A --------------\n\n"); auto [a,b,c] = means0(1,4,16); @@ -30,7 +30,7 @@ static void task_a() { } -static void task_b() { +void task_b() { printf("\n\n-------------- Task B --------------\n\n"); // Read vector @@ -57,11 +57,11 @@ static void task_b() { printf("Harmonic: %f\n", z); // deviation - double deviation(0.0); + double deviation; for (long unsigned int i=0; i(a.size())); + deviation = sqrt(deviation/a.size()); printf("Deviation: %f\n", deviation); // write results to file @@ -70,14 +70,14 @@ static void task_b() { } -static void task_c() { +void task_c() { printf("\n\n-------------- Task C --------------\n\n"); vector n_values = {15, 1001, 1432987}; for (int n : n_values) { printf("n = %d\n", n); - long int sum = 0; + double sum = 0; double loops = 1000; // Timing first function @@ -86,24 +86,24 @@ static void task_c() { sum = sum_of_spec(n); } double sec1 = toc(); - printf("For-loop funtion: result = %ld | time = %f milliseconds\n", sum, sec1*1000); + printf("For-loop funtion: result = %.f | time = %f milliseconds\n", sum, sec1*1000); // Timing second function tic(); for (int i=0; i(formula(n)); + sum = formula(n); } double sec2 = toc(); - printf("Formula funtion: result = %ld | time = %f milliseconds\n", sum, sec2*1000); + printf("Formula funtion: result = %.f | time = %f milliseconds\n", sum, sec2*1000); } } -static void task_d() { +void task_d() { printf("\n\n-------------- Task D --------------\n\n"); printf("See folder D.\n"); } -static void task_e() { +void task_e() { printf("\n\n-------------- Task E --------------\n\n"); for (int n : {100, 1000, 10000}) { @@ -130,7 +130,7 @@ static void task_e() { } } -static void task_f() { +void task_f() { printf("\n\n-------------- Task F --------------\n\n"); // single_goldbach(k) @@ -161,7 +161,7 @@ static void task_f() { } -static void task_g() { +void task_g() { printf("\n\n-------------- Task G --------------\n\n"); DenseMatrix const M(5,3); @@ -188,7 +188,7 @@ static void task_g() { // ####################################################### int const NLOOPS = 100; - int const n = 3000; + int const n = 1000; // Time initialization tic(); @@ -200,7 +200,7 @@ static void task_g() { // Time Mult tic(); vector f3 = M2.Mult(w); - for (size_t k=1; k f4 = M2.MultT(w); - for (size_t k=1; k 1e-4) @@ -233,14 +233,14 @@ static void task_g() { // Time initialization tic(); vector x(n,0); - for (int i=0; i(i))/(n-1) - 5 );} + for (int i=0; i f5 = M3.Mult(w); - for (size_t k=1; k f6 = M3.MultT(w); - for (size_t k=1; k 1e-4) @@ -269,6 +269,9 @@ static void task_g() { } } + printf("\nNOTE: difference in runtime noticable with n=10.000 (~30 seconds)\n"); + + } @@ -283,4 +286,4 @@ int main(){ task_g(); return 0; -} +}; \ No newline at end of file diff --git a/ex1/ABCEFG/skalar_stl/main.o b/ex1/ABCEFG/skalar_stl/main.o new file mode 100644 index 0000000..4bc5080 Binary files /dev/null and b/ex1/ABCEFG/skalar_stl/main.o differ diff --git a/ex1/ABCEFG/skalar_stl/mylib.cpp b/ex1/ABCEFG/skalar_stl/mylib.cpp index 9348cec..fbea237 100644 --- a/ex1/ABCEFG/skalar_stl/mylib.cpp +++ b/ex1/ABCEFG/skalar_stl/mylib.cpp @@ -18,26 +18,26 @@ using namespace std; tuple means0(double a, double b, double c){ double arith = (a+b+c) / 3; - double geo = pow((a*b*c), 1.0/3); - double harm = 3 / ((1.0/a) + (1.0/b) + (1.0/c)); + double geo = pow((a*b*c), 1.0f/3); + double harm = 3 / ((1.0f/a) + (1.0f/b) + (1.0f/c)); return make_tuple(arith, geo, harm); } tuple means(const vector& v){ - size_t n = v.size(); + int n = v.size(); double sum = 0; - double logsum = 0; + double prod = 1; double invsum = 0; - for (size_t i = 0; i(n); - double geo = exp(1.0/static_cast(n) * logsum); - double harm = static_cast(n) / invsum; + double arith = sum / n; + double geo = pow(prod, 1.0f/n); + double harm = n / invsum; return make_tuple(arith, geo, harm); } @@ -84,7 +84,7 @@ void write_vector_to_file(const string& file_name, const vector& v) ofstream fout(file_name); // Oeffne das File im ASCII-Modus if( fout.is_open() ) { - for (size_t k=0; k& v) // -------------- Task C -------------- -long int sum_of_spec(int n) +double sum_of_spec(int n) { long int sum = 0; - for (long int i=1; i(i)/(nm-1) - 5.0; - double x_j = 10.0*static_cast(j)/(nm-1) - 5.0; + double x_i = 10.0*i/(nm-1) - 5.0; + double x_j = 10.0*j/(nm-1) - 5.0; matrix[i*cols + j] = sigmoid(x_i) * sigmoid(x_j); } } @@ -260,7 +260,7 @@ vector DenseMatrix::MultT(const vector& vec) const } void DenseMatrix::print() const { - size_t count(0); + int count(0); cout.precision(5); for (double val : matrix) { printf("%.6f ", val); @@ -308,13 +308,4 @@ vector DenseMatrix2::MultT(const vector& vec) const } return result; -} - - -void task_a(); -void task_b(); -void task_c(); -void task_d(); -void task_e(); -void task_f(); -void task_g(); +} \ No newline at end of file diff --git a/ex1/ABCEFG/skalar_stl/mylib.h b/ex1/ABCEFG/skalar_stl/mylib.h index 88fd6a2..554a1f5 100644 --- a/ex1/ABCEFG/skalar_stl/mylib.h +++ b/ex1/ABCEFG/skalar_stl/mylib.h @@ -56,7 +56,7 @@ void fill_vector(istream& istr, vector& v); // -------------- Task C -------------- // Sums up all positive integers less or equal n which are multiples of 3 or of 5 (including or!) by brute force. -long int sum_of_spec(int n); +double sum_of_spec(int n); // Sums up all positive integers less or equal n which are multiples of 3 or of 5 (including or!) by inclusion-exclusion principle. double formula(int n); @@ -93,7 +93,7 @@ private: size_t cols; vector matrix; public: - DenseMatrix(size_t n, size_t m); // Constructor + DenseMatrix(int n, int m); // Constructor vector Mult(const vector& vec) const; vector MultT(const vector& vec) const; void print() const; @@ -109,4 +109,4 @@ public: DenseMatrix2(vector const u, vector const v); // Constructor vector Mult(const vector& vec) const; vector MultT(const vector& vec) const; -}; +}; \ No newline at end of file diff --git a/ex1/ABCEFG/skalar_stl/mylib.o b/ex1/ABCEFG/skalar_stl/mylib.o new file mode 100644 index 0000000..089aca4 Binary files /dev/null and b/ex1/ABCEFG/skalar_stl/mylib.o differ diff --git a/ex1/ABCEFG/skalar_stl/out_1.txt b/ex1/ABCEFG/skalar_stl/out_1.txt new file mode 100644 index 0000000..fc78d82 --- /dev/null +++ b/ex1/ABCEFG/skalar_stl/out_1.txt @@ -0,0 +1,6 @@ +1 +1000 +498.184 +inf +95.6857 +287.905