Wie kann ich mir in Excel eine beliebige Nachkommastelle von Pi anzeigen lassen?

... komplette Frage anzeigen

5 Antworten

Zu beachten ist, dass die Formel =PI() nur 15 Nachkommastellen von π zurückliefert.

Um nun eine beliebige Nachkommastelle von π anzeigen lassen zu können, bieten sich folgende Möglichkeiten:

  1. Einfügen einer bestimmten Anzahl von Nachkommastellen von π in eine Zelle: Hier hast du das Problem, dass du keine beliebige Nachkommastelle von π, sondern sie dir nur bis zu einer Grenze ausgeben lassen kannst. 
  2. Implementieren eines Algorithmus zur Berechnung von π: Hier könntest du dir zwar jede beliebige Nachkommastelle von π anzeigen lassen, jedoch ist eine Berechnung auf beispielsweise die 191. Nachkommastelle extrem rechen- und zeitaufwendig. Dies ist nur zu empfehlen, wenn es wirklich wichtig ist, jede mögliche Nachkommastelle von π zur Verfügung zu haben. Eine unendliche Summe, die schnell konvergiert, wäre hierbei empfehlenswert. Ramanujans Formel zu Berechnung von π ist eine gute Wahl.

Das waren nun zumindest die Möglichkeiten, die ich zur Lösung deines Problems sehe.

Ich hoffe, ich konnte dir helfen; wenn du noch Fragen hast, kommentiere einfach.

LG Willibergi

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Iamiam
10.08.2016, 12:47

Implementieren eines Algorithmus zur Berechnung von π:
könnte man da wirklich EINZELNE STELLEN ausgeben? Denn sonst hat man ja wieder das Problem, dass xl nur auf 15 stellen genau rechnet und ausliest!

0
Kommentar von MeineFrage101
10.08.2016, 13:02

Vielen Danke für eure schnelle Hilfe. Die
Bailey-Borwein-Plouffe-Formel
 ist genau das was ich brauche. 

Danke auch an alle anderen die sich damit beschäftigt haben und versucht haben mir zu helfen. 

2

xl rechnet nur auf 15 Zählstellen genau. Bis zur 15. (14.Nachkomma-)Stelle

=Teil(Pi();16;1)

(das Komma ist auch ein Zeichen, aber keine Stelle)

Für höhere musst Du ins inet gehen, zB :

http://www.lamprechts.de/gerd/php/pi-Nachkommastellen-suche.php

zB ab Position ab 1:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Iamiam
10.08.2016, 12:25

191 liefert 5 im obigen Link

0

"beliebige" -> NEIN, da der Weltrekord für "Dezimalstellenposition" bei  13299999999998 liegt. (717)

http://www.lamprechts.de/gerd/php/pi-Nachkommastellen-suche.php

EXCEL hat mit VBA eine langsame Interpretersprache integriert -> damit gilt wie für alle Sprachen -> es gibt 3 grobe Wege:

a) intern speichern -> mit EXCEL sollten je nach Version mindestens 32000 im String ablegbar und per Mid Funktion einzelne Stellen herauspickbar sein

(neue EXCEL Versionen sollen bis 2 Mrd. Buchstaben pro String können)

b) externe Quellen wie Datei, Datenbank (wie der LINK oben) oder Internet

c) selbst berechnen: für das langsame VBA bis zu 4000 Stellen denkbar (danach wird es sehr langsam!)

Noch was zum BBP-Algorithmus:

- zur Zeit nur für hexadezimale Stellen bekannt! (die kann man nicht einfach nach dezimal wandeln, da man dazu die vorderen benötigt)

- auch hier steigt die Rechenzeit an: Hex-Position 1999999 benötigt bei

http://www.gerdlamprecht.de/Roemisch_JAVA.htm

unter Punkt "2. Textkonverter" selbst mit schnellem i7 etwa 5 Sekunden

Deshalb Vorschlag für Dich: Variante a)

VBA-Funktionen können dann auch in der Zelle aufgerufen werden, ohne dass Anwender den Code (kann per Passwort verschlüsselt werden) sehen können.

z.B. GetPiDezi(Position, AnzahlStellen)

=GetPiDezi(1,1) gibt dann 1 zurück {wenn man ohne Dezimaltrennzeichen im String arbeitet -> ansonsten =GetPiDezi(2,1) }

Antwort bewerten Vielen Dank für Deine Bewertung

Naja, "viele Stellen" ist relativ. PI() liefert mir 3,14159265358979. Dann ist Schluss. Oder meinst du eine manuelle Erfassung? Naja, spielt im Grunde keine Rolle.

Maskier die Stelle heraus.

Zum Beispiel die 11. Stelle:

=REST(GANZZAHL(PI()*10^11);10)
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Suboptimierer
10.08.2016, 12:19

Was auch geht:

=TEIL(PI();11+2;1)
0

Da keine Rückmeldung kam, hier der Code:

Mit Alt + F11 Makro-Editor öffnen und einfügen:

Global strPi As String

Sub auto_open()
Open "10Mio.txt" For Input As #1 
Line Input #1, strPi 
Close #1
End Sub

Function GetPiDezi(ByVal pos As Long, ByVal llen As Long) As String
GetPiDezi = Mid(strPi, pos + 1, llen)
End Function

Es wird also automatisch beim Laden der XLS die 10Mio.txt eingelesen

(gleicher Pfad wie XLS; wenn Du sie brauchst, melde Dich)

in Zelle B1 kommt Anzahl der Stellen

Zelle B2 gesuchte Position

Ergebnis landet sofort in Zelle B3, da dort die Funktion aufgerufen wird mit:

=GetPiDezi(B2;B1)

Siehe Bild

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?