Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

71 行
2.0KB

  1. #include "cpp_headers/fcpp.hh"
  2. // Berechne die Determinante einer 2x2 Matrix mit doubles
  3. double determinante_double(double a, double b, double c, double d) {
  4. return a*d - b*c;
  5. }
  6. // Berechne die Determinante einer 2x2 Matrix mit floats
  7. float determinante(float a, float b, float c, float d) {
  8. return a*d - b*c;
  9. }
  10. // Teste die Assoziativitaet von floating point Zahlen
  11. float testAssoziativitaet() {
  12. for (int n = 1; n <= 14; n++) {
  13. // (a+b)+c
  14. float vers1 = (pow(10, n) + -pow(10, n)) + pow(10,-n);
  15. // a+(b+c)
  16. float vers2 = pow(10, n) + (-pow(10, n) + pow(10,-n));
  17. print(n, vers1, vers2, 0);
  18. }
  19. }
  20. // Berechnet den effektiven Zinssatz mit floats
  21. // z: Zinssatz, n: Abrechnungsvorgaenge
  22. float zins(float z, int n) {
  23. return pow(1 + z/n, n) - 1;
  24. }
  25. // Berechnet den effektiven Zinssatz mit doubles
  26. // z: Zinssatz, n: Abrechnungsvorgaenge
  27. double zins(double z, int n) {
  28. return pow(1 + z/n, n) - 1;
  29. }
  30. // Vergleiche die Berechnung des effektiven Zinssatzes bei n Abrechnungsvorgaengen
  31. // mit floats und doubles und vergleiche mit dem Grenzwert für n -> unendlich.
  32. void compare(int n) {
  33. // Berechne effektiven Zins mit float
  34. float zf = zins(0.06, n);
  35. // Berechne die Differenz zu exp(z) - 1
  36. float difff = exp(0.06) - 1 - zf;
  37. // Berechne effektiven Zins mit double
  38. double zd = zins(0.06, n);
  39. // Berechne die Differenz zu exp(z) - 1
  40. double diffd = exp(0.06) - 1 - zd;
  41. // Gebe alles aus
  42. print("Abrechnungsvorgaenge:", n, 0);
  43. print("Zinssatz (float):", zf, 0);
  44. print("Abweichung von exp(z) - 1:", difff, 0);
  45. print("Zinssatz (double):", zd, 0);
  46. print("Abweichung von exp(z) - 1:", diffd, 0);
  47. print("");
  48. }
  49. int main() {
  50. print("det", determinante(100, 0.01, -0.01, 100), 0);
  51. print("double det", determinante_double(100, 0.01, -0.01, 100), 0);
  52. testAssoziativitaet();
  53. // vergleiche fuer verschiedene Werte
  54. compare(1);
  55. compare(4);
  56. compare(12);
  57. compare(365);
  58. compare(365*24);
  59. compare(365*24*60);
  60. compare(365*24*60*2);
  61. compare(365*24*60*60);
  62. }