// Dateien einbinden
#include <cmath>
#include <print>

// Fakultät n! berechnen
// Fakultät kann nur ganzzahlig sein
// val: n
// return: n!
unsigned int Factorial(unsigned int val)
{
    unsigned int fac = val;
    if (val != 1)
        fac *= Factorial(val - 1); // Rekursion!
    return fac;
}
// Potenzfunktion
// val: Basis
// pow: Potenz
// return: val^pow
double Power(double val, unsigned int pow)
{
    double result = val;
    for (unsigned int index = 1; index < pow; index++)
        result *= val;
    return result;
}
// Sinusreihe
// sin(x) = x - (x^3)/3! + (x^5)/5! - (x^7)/7! +- ...
double MySin(double val)
{
    double result = val;    // Ergebnis
    bool add = false;       // Vorzeichenflag
    // Bis zum 4. Term berechnen
    for (auto loop = 3; loop <= 7; loop += 2)
    {
        if (add)    // Vorzeichen ist positiv
            result += Power(val, loop) / Factorial(loop);
        else        // Vorzeichen ist negativ
            result -= Power(val, loop) / Factorial(loop);
        add = !add;
    }
    return result;
}
// main() Funktion
int main()
{
    double val = 1.4;           // Sinus hiervon berechnen
    // Sinus jeweils berechnen
    auto mySinus = MySin(val);
    auto stdSinus = std::sin(val);
    // Ergebnisse ausgeben
    std::println("MySin: {:.4}, std:sin(): {:.4}\n"
        "Differenz: {:.4}", mySinus, stdSinus, mySinus-stdSinus);
}
