-------------------------------------------------------------------------
MAC-115 - Variaveis do tipo double ------- series
==========================================================================
/*
* arquivo: arctan.c
* -----------------
* Dado x (real), e n, um inteiro, calcular arctan x,
* atraves da soma dos n primeiros termos da serie
*
* x - x^3 / 3 + x^5 / 5 - x^7 / 7 + ...
*
*/
#include <stdio.h>
#include <math.h> // <=== para fazer o calculo de arctan(x) usando a funcao
// atan(.) da biblioteca math. Veja: é atan e não arctan o
// nome da funcao. Veja o ultimo printf.
int main()
{
int i, n;
double x, s, potx;
printf("Forneca o valor de n: ");
scanf("%d", &n);
printf("Forneca o valor de x: ");
scanf("%lf", &x);
s = potx = x;
for (i = 1; i < n; i++) {
potx = - potx * x * x;
s = s + potx / (2 * i + 1);
}
printf("arctan(%g) = %.20g\n", x, s);
printf("Usando a funcao atan(.) ja' disponivel: arctan(%g) = %g\n", x, atan(x));
return 0;
}
=======================================================================
Variaçoes sobre o mesmo tema -- calculo sem fixar o numero de termos
============================
/*
* arquivo: exp2epsilon.c
* ----------------------
* Dado x e epsilon (reais) e n, um inteiro, exp calcula exp(x)
* atraves da soma dos termos da serie
*
* 1 + x + x^2/2! + x^3/3! + ...
*
* ate o valor absoluto da parcela se tornar <= epsilon.
* Paramos quando encontramos um tal termo.
*/
#include <stdio.h>
#include <math.h>
int main()
{
int i;
double x, epsilon, s = 1.0, t = 1.0;
printf("Forneca o valor de epsilon: ");
scanf("%lf", & epsilon);
printf("Forneca o valor de x: ");
scanf("%lf", &x);
i = 1;
while (t > epsilon || t < -epsilon) {
t *= x / i; // forma simplificada de t = t * x / i //
s += t; // forma simplificada de s = s + t //
i++;
}
printf("exp(%g) = %.20g [nossa serie]\n", x, s);
printf("exp(%g) = %.20g [biblioteca math]\n", x, exp(x));
return 0;
}
---------------------------------------------------------------
/*
* arquivo: exp2indif3.c
* ---------------------
* Dado numero real x, este programa calcula exp(x)
* atraves da soma dos termos da serie
*
* 1 + x + x^2/2! + x^3/3! + ...
*
* A soma e' feita ate que a soma de um termo nao faca mais
* diferenca. Isto e', ate' que somar novos termos fique
* "indiferente".
*/
#include <stdio.h>
#include <math.h>
int main()
{
int i;
double x, s = 0.0, t = 1.0, tmp;
printf("Forneca o valor de x: ");
scanf("%lf", &x);
tmp = t;
i = 1;
while (s != tmp) {
s = tmp;
t = t * x / i;
tmp = s + t;
i++;
}
printf("exp(%g) = %.20g [nossa serie]\n", x, s);
printf("exp(%g) = %.20g [biblioteca math]\n", x, exp(x));
return 0;
}