C :: Aufgabe #124 :: Lösung #1

1 Lösung Lösung öffentlich
#124

23. Nachkommastelle der EULER-Konstanten

Fortgeschrittener - C von hollst - 10.08.2016 um 15:51 Uhr
Die EULER-Konstante e ist im Bereich der angewandten Mathematik die mit Abstand wichtigste reelle Zahl.
Selbst die in der Allgemeinheit bekanntere Kreiszahl pi kann da nicht mithalten.

EULER selbst hat bereits vor dem Jahre 1748 (Bild 1, Introductio in analysin infinitorum, in diesem Buch auf Seite 90) e mit 23 Nachkommastellen angegeben
(bzw. von seinen Schülern zuvor berechnen lassen): e = 2.71828182845904523536028 ...
Eine fantastische Leistung, die sicherlich einige Monate Zeit und Nerven gekostet hat.

Die 23. Nachkommastelle, die 8, muss ein gerundeter Wert sein. Folgende Fragen sollen mit Hilfe von Rechentechnik beantwortet werden:
Wurde die 23. Nachkommastelle von EULER auf- oder abgerundet und welchen Wert hat die 100. Nachkommastelle von e?

Für die Berechnung von e gibt es diverse Formeln, am bekanntesten ist die Aufsummierung aller reziproke Fakultäten der natürlichen Zahlen (e = 1/0! + 1/1! + 1/2! + 1/3! + ...). Der Schwierigkeitsgrad der Aufgabenstellung hängt mit der Umgehung von Rundungsfehlern zusammen. Wer sein Ergebnis abgleichen möchte, kann sich z. B. hier informieren: http://www-history.mcs.st-andrews.ac.uk/HistTopics/e_10000.html
#1
vote_ok
von devnull (8870 Punkte) - 22.11.2016 um 15:42 Uhr

Konsolenausgabe:

Berechne 1000 Nachkommastellen von e:
2.718281828459045235360287471352662497757247093699959574966967627724076630353547...
23. Stelle von e ist '8'
24. Stelle von e ist '7'
100. Stelle von e ist '4'

Quellcode ausblenden C-Code
/****************************************
 * spigot_e.c   Tröpfelalgorithmus für e
 ****************************************/
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv) {
	int max = 1000;
	int len = 10*max / 4;
	int i, j, p, q;
	long a[len+1];

	/* char-Array fuer e-Ziffern */
	char e[max+1];
	char *pe = e;

	printf("Berechne %d Nachkommastellen von e:\n", max);
    for (i=1; i<=len; i++)
		a[i] = 1;
    for (i=1; i<=max; i++) {
		q=0;
        for (j=len; j>=1; j--) {
			p = 10*a[j] + q;
            a[j] = p % (j+1);
            q = p / (j+1);
		}
		*pe++ = q+'0';
	}
	e[max]=0;

	printf("2.%s\n", e);
	printf(" 23. NK-Stelle von e ist '%c'\n", e[22]);
	printf(" 24. NK-Stelle von e ist '%c'\n", e[23]);
	printf("100. NK-Stelle von e ist '%c'\n", e[99]);
	return 0;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2104329

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.