Ich habe versucht, e mithilfe der Reihendarstellung zu approximieren, um so viele Präzisionsziffern wie möglich mit dem unten stehenden Code zu erhalten, aber egal wie viele Terme ich berechne, die Anzahl der Präzisionsziffern scheint gleich zu bleiben. dh:Approximieren e - So viele Präzisionsziffern wie möglich erhalten
2,71828198432922363281250000000000000000000000000000
Ist es mein Ansatz, was falsch ist? Hier ist der Code:
1 #include <stdio.h>
2 #include <iostream>
3 #include <math.h>
4 using namespace std;
5
6 float factorial (float a)
7 {
8 if (a > 1)
9 {
10 return (a * factorial (a-1));
11 } else
12 {
13 return 1;
14 }
15 }
16
17 int main()
18 {
19 float sum = 0;
20 int range=100000;
21
22 for (int i=0; i<=range;i++)
23 {
24 sum += pow(-1,i)/factorial(i);
25 }
26 sum = pow(sum,-1);
27 printf("%4.50f\n", sum);
28 }
Sie durch die Wahl des Datentyps begrenzt sind: Sie erhalten eine Fehler in der 8. Stelle. Verwenden Sie 'long double' statt' float', um zu sehen, ob die Ergebnisse etwas besser werden. – dasblinkenlight
google for "Was jeder Informatiker über Fließkomma-Mathematik wissen sollte". Wenn Ihre Bedingungen klein genug werden, haben sie keinen Einfluss mehr auf die Summe. –
@gspr: Beachten Sie die letzte Zeile vor dem Drucken. Natürlich ist 'pow()' ein schrecklich langsamer Weg, dies zu tun. –