#include "cpp_headers/fcpp.hh" // Berechne die Determinante einer 2x2 Matrix mit doubles double determinante_double(double a, double b, double c, double d) { return a*d - b*c; } // Berechne die Determinante einer 2x2 Matrix mit floats float determinante(float a, float b, float c, float d) { return a*d - b*c; } // Teste die Assoziativitaet von floating point Zahlen float testAssoziativitaet() { for (int n = 1; n <= 14; n++) { // (a+b)+c float vers1 = (pow(10, n) + -pow(10, n)) + pow(10,-n); // a+(b+c) float vers2 = pow(10, n) + (-pow(10, n) + pow(10,-n)); print(n, vers1, vers2, 0); } } // Berechnet den effektiven Zinssatz mit floats // z: Zinssatz, n: Abrechnungsvorgaenge float zins(float z, int n) { return pow(1 + z/n, n) - 1; } // Berechnet den effektiven Zinssatz mit doubles // z: Zinssatz, n: Abrechnungsvorgaenge double zins(double z, int n) { return pow(1 + z/n, n) - 1; } // Vergleiche die Berechnung des effektiven Zinssatzes bei n Abrechnungsvorgaengen // mit floats und doubles und vergleiche mit dem Grenzwert für n -> unendlich. void compare(int n) { // Berechne effektiven Zins mit float float zf = zins(0.06, n); // Berechne die Differenz zu exp(z) - 1 float difff = exp(0.06) - 1 - zf; // Berechne effektiven Zins mit double double zd = zins(0.06, n); // Berechne die Differenz zu exp(z) - 1 double diffd = exp(0.06) - 1 - zd; // Gebe alles aus print("Abrechnungsvorgaenge:", n, 0); print("Zinssatz (float):", zf, 0); print("Abweichung von exp(z) - 1:", difff, 0); print("Zinssatz (double):", zd, 0); print("Abweichung von exp(z) - 1:", diffd, 0); print(""); } int main() { print("det", determinante(100, 0.01, -0.01, 100), 0); print("double det", determinante_double(100, 0.01, -0.01, 100), 0); testAssoziativitaet(); // vergleiche fuer verschiedene Werte compare(1); compare(4); compare(12); compare(365); compare(365*24); compare(365*24*60); compare(365*24*60*2); compare(365*24*60*60); }