ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo009.c File Reference

Aproximación de exp(x) con serie de Taylor (cálculo directo de potencias y factorial). More...

#include <stdio.h>
Include dependency graph for Ejemplo009.c:

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 Punto de entrada. Calcula exp(x) con Taylor y cálculo “desde cero” de cada término.

Detailed Description

Aproximación de exp(x) con serie de Taylor (cálculo directo de potencias y factorial).

Usa la expansión: exp(x) = sum_{i=0}^{∞} x^i / i!

Este programa aproxima con n términos: exp(x) ≈ sum_{i=0}^{n-1} x^i / i!

Para cada término i, calcula:

  • num = x^i (multiplicando x repetidamente)
  • den = i! (multiplicando 1*2*...*i)
Entrada
  • Un entero n >= 1 (número de términos).
  • Un real x (float).
Salida
Imprime:
exp(x) = <aprox>
Complejidad
Tiempo: O(n^2) (por el doble ciclo). Memoria: O(1).
Warning
El factorial crece muy rápido; 'den' (long int) puede desbordarse para i moderados. También puede perderse precisión por usar float.

Definition in file Ejemplo009.c.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Punto de entrada. Calcula exp(x) con Taylor y cálculo “desde cero” de cada término.

Parameters
argcNo usado.
argvNo usado.
Returns
0 si finaliza correctamente.

Definition at line 42 of file Ejemplo009.c.

43{
44 (void)argc;
45 (void)argv;
46
47 int n, i, j;
48 long int den; /* factorial i! (puede desbordar para i grandes) */
49 float x, num, ex; /* num = x^i, ex = acumulador */
50
51 /* Leer n >= 1 */
52 do {
53 printf("Ingrese el numero de terminos: ");
54 scanf("%d", &n);
55 } while (n < 1);
56
57 /* Leer x */
58 printf("Ingrese el valor de x: ");
59 scanf("%f", &x);
60
61 /*
62 ex acumula la suma:
63 ex = sum_{i=0}^{n-1} x^i / i!
64 */
65 for (i = 0, ex = 0; i < n; i++)
66 {
67 /*
68 Para el término i:
69 num = x^i
70 den = i!
71
72 Se reinician en 1 y se multiplican i veces.
73 */
74 for (j = 0, num = 1, den = 1; j < i; j++)
75 {
76 num *= x; /* num = x^(j+1) al avanzar */
77 den *= (j + 1); /* den = (j+1)! al avanzar */
78 }
79
80 ex += (num / den);
81 }
82
83 printf("exp(%f) = %f\n", x, ex);
84 return 0;
85}