Visual Basic : Kalkulation von Pi als String?

...komplette Frage anzeigen

3 Antworten

Deine Herangehensweise ist in mehrfacher Hinsicht ungenau und langsam.

Viele Rechner rechnen schon sin(x) nicht mal auf 15 Stellen genau aus -> und dann noch weiterrechnen -> erzeugt zig Rundungsfehler...

zu "Möglichkeit": ja, und das unabhängig von der Sprache, da mathematische Algorithmen universell sind.

Unter http://www.gerdlamprecht.de/Kreiszahl.htm  

habe ich über 100 Algorithmen zur Berechnung von Pi zusammengefasst. Viele kann man per LINK gleich mit dem Iterationsrechner online ausrechnen.

Wie man unter Punkt 5 sieht, gibt es bereits fertige Funktionen wie acos(-1), die Pi ausrechnen.

Mit "6. Bruch-Funktionen..." wie  226517876251716162692149071050771828410490449602080890536575346 / 72102879408277751642507260419334203501590758230297414247167791

kannst Du Pi auf 86 Stellen berechnen.

Dazu gibt es im Internet zig fertige Funktionen, die das Dividieren mit String-Zahlen realisieren.

§4d: 10 Iterationen und man bekommt 13 Mio. richtige Nachkommastellen! Problem ist nur die 5. Wurzel, die man per Iteration erst mal genau berechnen muss...

Wenn man richtig viele Stellen berechnen will, kannst Du alles mit .net vergessen, da diese "Interpretersprache" erst mit Microsoft "telefoniert" als direkt mit Deinen 8 CPU-Kernen!

Ganz am Ende findest Du y-cruncher (nutzt §2b): 1 Mrd. Stellen in etwa 4 min holt alles aus Deiner CPU heraus -> ist damit etwa 100000 mal schneller als .net!

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Zipfel1
22.11.2015, 18:28

Ich bin jetzt so weit ist leider Irre langsam. Kannst du mir sagen warum das so langsam ist und was mann verbessern kann?

und wie kann ich das ganze auf meinem RASPI 2b laufen lassen?

Imports System.Numerics

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim Stopw As New Stopwatch()

Stopw.Start()

Dim Nachkommastellen As BigInteger = TextBox2.Text

Dim Pi As BigInteger

Dim Pow As BigInteger = BigInteger.Pow(100, Nachkommastellen)

Dim Interruptionen As BigInteger = BigInteger.Add(BigInteger.Pow(10, BigInteger.Add(Nachkommastellen, 1)), 1)

For i = 1 To Interruptionen Step 4

Pi = BigInteger.Add(Pi, BigInteger.Divide(Pow, i))

Pi = BigInteger.Subtract(Pi, BigInteger.Divide(Pow, i + 2))

Next

Pi = BigInteger.Multiply(Pi, 4)

Stopw.Stop()

MessageBox.Show("3, " + Pi.ToString.Substring(1, Nachkommastellen), "Zeit : " + Stopw.Elapsed.TotalSeconds.ToString)

End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Process.GetCurrentProcess.PriorityClass = ProcessPriorityClass.RealTime

End Sub

End Class

0

ich hab in vb.net nur die BigInteger class gefunden. durch skalierung (also verschiebung des dezimalpunktes nach rechts um z.b. 100 stellen) könnte man damit arbeiten - also jedes glied der (egal welcher) reihenentwicklung mit 10 hoch 100 multiplizieren.

das mit der geschlossenen sinus-funktion dürfte schwierig sein.

interessant vielleicht auch dieser eigenbau: http://www.vbforums.com/showthread.php?510529-Working-with-BIG-numbers-or-LOTS-of-decimal-places

Antwort bewerten Vielen Dank für Deine Bewertung

Ich verstehe gerade den Sinn der Aktion nicht. Wie kommst du denn an die Sinuswerte? Machst du das mit einer Reihenentwicklung? Nach wie vielen Gliedern brichst du ab?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Zipfel1
21.11.2015, 11:34

Es geht unter anderem darum wie ich den sinus genauer berechnen kann als mit Math.sin() da dort nur ein double zurückgegeben wird

0
Kommentar von lks72
21.11.2015, 11:37

Dann schau dir die Reihenentwicklung von Sinus an, dies ist eine unendliche Summe von immer kleiner werdenden Brüchen, und es ist dir überlassen , wie viele du davon auswertest. In den Brüchen taucht nur Multiplikation und Division auf, dies lässt sich wohl so programmieren, dass man es in einen String ablegen kann.

1
Kommentar von lks72
21.11.2015, 11:44

Außerdem, wenn es dir doch um PI geht, dann nimm doch eine Reihenentwicklung von pi, zum Beispiel die Formel von Leibnitz., die geht ohne Sinus

0
Kommentar von lks72
21.11.2015, 11:47

Sorry, meine Leibniz, Leibnitz ist der Keks :-)

0

Was möchtest Du wissen?