Itérations de Bailey – Borwein – Plouffe
Nous avons vu quelques défis pi sur PPCG, mais aucun qui dicte spécifiquement l'algorithme que vous devez utiliser. J'aimerais voir des implémentations de l' algorithme Bailey – Borwein – Plouffe dans n'importe quel langage jusqu'à l'itération n
. La formule est la suivante:
Votre algorithme doit sortir chaque itération jusqu'à n, en montrant les sommes intermédiaires ainsi que le résultat final pour former un "piangle". Vous pouvez également utiliser la forme polynomiale réduite de l'algorithme présenté sur la page wikipedia. Un exemple d'exécution pour n=50
est illustré ci-dessous:
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
La précision de chaque itération doit être égale à la n
qui est passée à l'algorithme, c'est-à-dire que chaque itération doit calculer pi jusqu'au passé n
pour tous k
.
Règles:
- Les fonctions intégrées ne sont pas autorisées, ni
pi
vous ne devez pas non plus utiliser la formule. - Vous devez soutenir
n
jusqu'à un maximum que votre langue permet en termes de calcul16^n
. Si l'entrée provoque un dépassement arithmétique pendant le calcul après lesx<n
exécutions parce que votre langue ne prend en charge que les décimales jusqu'à2^32-1
, cela ne pose aucun problème . Toutes les autres hypothèses surn
ne sont pas correctes. - Vous DEVEZ fournir une explication de la façon dont vous avez obtenu la sortie si ce n'est pas évident. Par exemple, si vous publiez dans une langue de golf, une ventilation est requise à 100%. C'est pour vous assurer que vous utilisez l'algorithme spécifié.
- Les trous de boucle standard ne sont pas autorisés.
- Il s'agit du code-golf, le nombre d'octets le plus bas gagne ici.
Code de référence (code utilisé pour générer l'exemple):
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))
}
}
Cette mise en œuvre plafonne à n=255
, vous pouvez plafonner à moins ou plus.
Cette implémentation a été effectuée dans Groovy.
Calculate foo via x method
défis.