EDIT: Il requisito era vago e invece di calcolare l'n-esima cifra di pi desideravano solo l'ennesima cifra che non andasse oltre la limitazione dei float, quindi il metodo della forza bruta ha funzionato per i requisiti.Implementazione della formula Bailey-Borwein-Plouffe in C++?
Ho bisogno di calcolare PI la n-esima cifra e volevo provare ad usare lo BBP formula ma ho delle difficoltà. L'equazione che ho digitato non sembra darmi PI in modo corretto.
(1/pow(16,n))((4/(8 * n + 1)) - (2/(8 * n + 4)) - (1/(8 * n + 5)) - (1/(8 * n + 6)))
ho avuto successo con il modo in cui la forza bruta di trovare PI ma che è solo in modo accurato e trovare il numero n-esimo è difficile.
(4 - (4/3) + (4/5) - (4/7)...)
volevo sapere se qualcuno ha avuto una migliore idea di come fare questo o forse aiutare con la mia equazione BBP su quello che ho incasinato?
Grazie,
LF4
Funzionale ma non molto preciso fino a quando un paio di iterazioni in e poi si deve disreguard ultimi.
#include <iostream>
using namespace std;
int main()
{
int loop_num = 0;
cout << "How many digits of pi do you want?: ";
cin >> loop_num;
double my_pi = 4.0;
bool add_check = false;
int den = 3;
for (int i = 0; i < loop_num; i++)
{
if (add_check)
{
my_pi += (4.0/den);
add_check = false;
den += 2;
}
else
{
my_pi -= (4.0/den);
add_check = true;
den += 2;
}
}
cout << "Calculated PI is: " << my_pi << endl;
system("pause");
return 0;
}
Quello che spero sarebbe un programma migliore.
#include <iostream>
#include <cmath>
using namespace std;
const double PI_BASE = 16.0;
int main()
{
int loop_num = 0;
cout << "How many digits of pi do you want?: ";
cin >> loop_num;
double my_pi = 0.0;
for (int i = 0; i <= loop_num; i++)
{
my_pi += (1.0/pow(PI_BASE,i))((4.0/(8.0 * i + 1.0)) -
(2.0/(8.0 * i + 4.0)) -
(1.0/(8.0 * i + 5.0)) -
(1.0/(8.0 * i + 6.0)));
}
cout << "Calculated PI is: " << my_pi << endl;
system("pause");
return 0;
}
Quanta precisione ti aspetti? E come si confronta alla precisione supportata dal tipo che stai usando? Che dire delle proprietà numeriche dell'algoritmo ... meno segni significano sempre doversi preoccupare della perdita di precisione. – dmckee
Volevo calcolare PI come sappiamo che è corretto o no (esclusa l'ultima cifra che potrebbe essere arrotondata). Il programma richiede all'utente il numero di cifre significative di pi che vogliono, quindi lo calcola. Dalla mia comprensione la formula BBP si riassume per ogni numero da 0 a infinito. Ogni volta sarebbe una cifra in più di pi. Aggiungerò il mio codice per aiutare e capire cosa voglio. – LF4
Le rappresentazioni in virgola mobile incorporate supportano solo cifre decimali 6-7 (32 bit) o 15-16 (64 bit) (e possibilmente 17-18 (80 bit) decimali. Per ottenere più di quello dovrai usare un pacchetto arbitrario di precisione di qualche tipo. C'è un documento che circola su internet chiamato * Ciò che ogni scienziato informatico dovrebbe sapere sull'aritmetica a virgola mobile *. Hai bisogno di leggerlo. – dmckee