36 lines
841 B
C
36 lines
841 B
C
#include <stdio.h>
|
|
|
|
#define HALFPI 1.5707963268
|
|
|
|
// Compute factorial iteratively
|
|
double factorial(int n) {
|
|
double result = 1.0;
|
|
for (int i = 2; i <= n; ++i) {
|
|
result *= i;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
double abs_double(double x) { return x < 0 ? -x : x; }
|
|
|
|
// SICP-style iterative approximation for sin(x)
|
|
double sin_iter(double x) {
|
|
double term = x; // First term of the series
|
|
double sum = term; // Initial sum
|
|
// double prev_sum;
|
|
int n = 1; // Starting from x^3/3!
|
|
|
|
do {
|
|
// prev_sum = sum;
|
|
term *= -x * x / ((2 * n) * (2 * n + 1)); // Next term in series
|
|
sum += term;
|
|
++n;
|
|
} while (abs_double(term) > 1e-10); // Stop when term is sufficiently small
|
|
|
|
return sum;
|
|
}
|
|
|
|
int main() {
|
|
printf("Approximated sin(pi/2) = %.10f\n", sin_iter(HALFPI));
|
|
return 0;
|
|
}
|