02/07/2018, 13:25
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double pi=0;
int j=0,x;
cout<<"dammi il grado dell approssimazione";
cin>>x;
while (j<=x){
pi=pi+((pow(-1,j)*4)/((2*j)+1));
j++;
}
cout<<pi;
return 0;
}
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double pi=0,pi1=0,e,diff=4-3/4;
int i,j=0;
cin>>e;
while (diff<e) {
while (j<=i){ pi=pi+((pow(-1,j)*4)/((2*j)+1)); j++; }
while (j<=i){ pi1=pi1+((pow(-1,j-1)*4)/((2*(j-1))+1)); j++; }
diff=pi-pi1;
}
cout<<diff;
return 0;
}
03/07/2018, 11:00
03/07/2018, 13:29
03/07/2018, 15:22
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main() {
double pi=0,e;
int j;
cout<<"dammi epsilon";
cin>>e;
for(j=0;j<=2/e-1/2;j++) { pi=pi+(pow(-1,j)*4)/((2*j)+1) }
cout<<pi;
}
03/07/2018, 20:46
ho scritto questo ma qualsiasi double che scrivo mi esce sempre 0,
i double li scrivo con il . esempio 0.06 ; come ide uso DEV c++
j<=2/e-1/2
j<=ceil(2/e-1/2)
#include <iostream>
#include <math.h>
using namespace std;
double pi(const unsigned int n)
{
double p = 0;
for(unsigned int i = 0; i <= n; ++i)
{
p += pow(-1, i) * 4 /(2 * i + 1);
}
return p;
}
int main()
{
double e;
cout << "epsilon -->";
cin >> e;
unsigned int n = ceil(2 / e - 0.5);
cout << "n = " << n << endl;
e = pi(n);
cout << "pi(n) = " << e << endl;
e -= pi(n - 1);
if(e < 0)
{
e = -e;
}
cout << "|pi(n)-pi(n-1)| = " << e;
}
03/07/2018, 23:50
1/2
è di tipo int
ed è uguale a \(0\).j <= std::ceil(a - 0.5 )
è equivalente a j <= std::round( a )
. Inoltre usare pow
per la potenza di -1
è ridicolo. Personalmente trovo che sia usato troppo dagli studenti di informatica. Da notare inoltre che ceil ritorna un valore di tipo double.#include <iostream>
#include <cmath>
#include <chrono>
#include <limits>
double pi(const long n, double& last_error)
{
double p = 0;
double eps = 1.;
double den = 0.25;
double elem = 0.;
for (long i = 0; i <= n; ++i)
{
elem = 1 / den;
p += (eps * elem);
eps *= -1.;
den += 0.5;
}
last_error = elem;
return p;
}
double pi2(const long n, double& last_error)
{
double p = 0.;
double el = 0.;
for (long i = 0; i <= n; ++i)
{
el = pow(-1, i) * 4. / (2. * i + 1.);
p += el;
}
return p;
}
int main()
{
const double min_epsilon = 4. / std::numeric_limits<long>::max();
double e;
std::cout << "epsilon = ";
std::cin >> e;
if (e < min_epsilon)
{
e = min_epsilon;
std::cerr << "ERRORE: valore di epsilon troppo piccolo, l'epsilon sara' " << e << std::endl;
}
long n = std::lround(2. / e);
std::cout << "n = " << n << std::endl;
auto now = std::chrono::high_resolution_clock::now();
double res = pi(n, e);
auto end = std::chrono::high_resolution_clock::now();
std::cout << "pi(n) = " << res << std::endl;
std::cout << "|pi(n)-pi(n-1)| = " << e << std::endl;
std::cout << "time = " << std::chrono::duration<double, std::milli>(end - now).count() << "ms" << std::endl;
now = std::chrono::high_resolution_clock::now();
res = pi2(n, e);
end = std::chrono::high_resolution_clock::now();
std::cout << "pi(n) = " << res << std::endl;
std::cout << "|pi(n)-pi(n-1)| = " << e << std::endl;
std::cout << "time = " << std::chrono::duration<double, std::milli>(end-now).count() << "ms" << std::endl;
}
epsilon = 1E-7
n = 20000000
pi(n) = 3.14159
|pi(n)-pi(n-1)| = 1e-07
time = 824.768ms
pi(n) = 3.14159
|pi(n)-pi(n-1)| = 1e-07
time = 4862.78ms
Premere un tasto per continuare . . .
double pi(const long n, double& last_error)
{
double p = 0;
double eps = 1.;
double den = 0.25;
double elem = 0.;
for (long i = 0; i <= n; ++i)
{
elem = 1. / den;
p += elem;
den += 0.5;
if (i++ == n) break;
elem = 1. / den;
p -= elem;
den += 0.5;
}
last_error = elem;
return p;
}
30/09/2019, 15:36
30/09/2019, 23:30
02/10/2019, 12:15
//Program that calculates the approximation of pi greek of degree n.
#include <iostream>
#include <cmath>
using namespace std;
int main ()
{
double pi;
int j, n;
cout << "Scrivere il grado dell'approssimazione:\n";
cin >> n;
while (j<=n) {
j=0;
pi=pi+((pow(-1,j))*4/(2j+1));
j++;
}
return 0; // indicate that program ended successfully
}
// end function main
03/10/2019, 17:17
2j
2 * j
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.
Powered by phpBB © phpBB Group - Privacy policy - Cookie privacy
phpBB Mobile / SEO by Artodia.