Bailey-Borwein-Plouffe-Iterationen
Wir haben ein paar Pi-Herausforderungen bei PPCG gesehen, aber keine, die speziell den Algorithmus vorschreiben, den Sie verwenden sollten. Ich würde gerne Implementierungen des Bailey-Borwein-Plouffe-Algorithmus in jeder Sprache bis hin zur Iteration sehen n
. Die Formel lautet wie folgt:
Ihr Algorithmus sollte jede Iteration bis zu n ausgeben und dabei sowohl Zwischensummen als auch das Endergebnis anzeigen, um ein "Dreieck" zu bilden. Sie können auch die reduzierte Polynomform des auf der Wikipedia-Seite gezeigten Algorithmus verwenden. Ein Beispiellauf für n=50
ist unten gezeigt:
3
3.1
3.14
3.141
3.1415
3.14159
3.141592
3.1415926
3.14159265
3.141592653
3.1415926535
3.14159265358
3.141592653589
3.1415926535897
3.14159265358979
3.141592653589793
3.1415926535897932
3.14159265358979323
3.141592653589793238
3.1415926535897932384
3.14159265358979323846
3.141592653589793238462
3.1415926535897932384626
3.14159265358979323846264
3.141592653589793238462643
3.1415926535897932384626433
3.14159265358979323846264338
3.141592653589793238462643383
3.1415926535897932384626433832
3.14159265358979323846264338327
3.141592653589793238462643383279
3.1415926535897932384626433832795
3.14159265358979323846264338327950
3.141592653589793238462643383279502
3.1415926535897932384626433832795028
3.14159265358979323846264338327950288
3.141592653589793238462643383279502884
3.1415926535897932384626433832795028841
3.14159265358979323846264338327950288419
3.141592653589793238462643383279502884197
3.1415926535897932384626433832795028841971
3.14159265358979323846264338327950288419716
3.141592653589793238462643383279502884197169
3.1415926535897932384626433832795028841971693
3.14159265358979323846264338327950288419716939
3.141592653589793238462643383279502884197169399
3.1415926535897932384626433832795028841971693993
3.14159265358979323846264338327950288419716939937
3.141592653589793238462643383279502884197169399375
3.1415926535897932384626433832795028841971693993751
3.14159265358979323846264338327950288419716939937510
Die Genauigkeit jeder Iteration sollte n
derjenigen entsprechen, die an den Algorithmus übergeben wird, d. H., Jede Iteration sollte pi bis zu dem n
für alle übergebenen Wert berechnen k
.
Regeln:
- Eingebaute Funktionen sind nicht zulässig
pi
. Sie müssen auch nicht die Formel verwenden. - Sie müssen
n
bis zu einem Maximum unterstützen, das Ihre Sprache in Bezug auf die Berechnung von zulässt16^n
. Wenn die Eingabe während der Berechnung nach derx<n
Ausführung einen arithmetischen Überlauf verursacht, weil Ihre Sprache nur Dezimalstellen bis zu unterstützt2^32-1
, ist dies in Ordnung. Alle anderen Annahmenn
sind nicht in Ordnung. - Sie MÜSSEN erklären, wie Sie die Ausgabe erhalten haben, wenn dies nicht offensichtlich ist. Wenn Sie beispielsweise in einer Golf-Sprache posten, ist eine Aufschlüsselung zu 100% erforderlich. Damit stellen Sie sicher, dass Sie den angegebenen Algorithmus verwenden.
- Standard-Schlupflöcher sind nicht zulässig.
- Dies ist Code-Golf, hier gewinnt die niedrigste Byteanzahl.
Referenzcode (Code zum Generieren des Beispiels):
public static void main(String[] args) {
(0..50).each {
n->
def x=(0..n).collect {
j->
def k=new BigDecimal(j)
def s={it.setScale(n)}
def a=s(1.0g).divide(s(16.0g)**s(k))
def b=s(4.0g)/(s(8.0g)*s(k)+s(1.0g))
def c=s(2.0g)/(s(8.0g)*s(k)+s(4.0g))
def d=s(1.0g)/(s(8.0g)*s(k)+s(5.0g))
def e=s(1.0g)/(s(8.0g)*s(k)+s(6.0g))
def f=a*(b-c-d-e)
}.sum()
println(n + "\t" + x.setScale(n, BigDecimal.ROUND_DOWN))
}
}
Diese Implementierung beschränkt sich auf n=255
, Sie können auch auf weniger oder mehr begrenzen.
Diese Implementierung wurde in Groovy durchgeführt.
Calculate foo via x method
Herausforderungen darstellt.