I was trying to compute the sum of series which involves factorials.
The series is: 1 1/2! 1/3! 1/4! ...
btw 3! = 1 x 2 x 3
4! = 1 x 2 x 3 x 4
...so on, it continues like this for every number
This is the code I've written to run the C program:
#include <stdio.h>
void main() {
/* Any problems with the variables? */
int i, lim, fact = 1;
float sum = 0.0, term;
printf("Enter the limit for the sum of series: ");
scanf("%d", &lim);
/* Any problems in the loop? */
for (i = 1; i <= lim; i ) {
fact *= i;
term = 1 / fact;
sum = fact;
}
printf ("%f is the sum of the series\n", sum);
}
Is there any syntax error here that I just can't see or something, or is it a problem of the compiler. If so, I'm using gcc on ubuntu. Nevertheless, I'm not getting the correct output.
CodePudding user response:
At least these problems:
1 / fact
is int
division with an int
quotient.
Try 1.0f / fact
for a float
division and float
quotient.
sum = fact;
--> sum = term;
is code should sum the terms.
CodePudding user response:
There are some mistakes in your code.
The first one, is very common when we start learning C
1 / fact
must be replaced by 1.0f / fact
Why? Because in C, 1 / 2
is performed using integer arithmetic and returns 0
. If you want to perform computation using floating numbers you must force at least one argument being a floating number, this can be done by 1.0/2
, 1/2.0
or 1.0/2.0
. The previous expressions will be evaluated using double
floating number type (which is the C default type for floating number). If you want to use simple precision floating numbers, float
, you can use 1.0f
the second one is certainly an inadvertent error:
sum = fact;
must be replace by sum = term;
Here is a "working" code
#include <stdio.h>
void
main()
{
/*Any problems with the variables ?*/
int i, lim, fact = 1;
float sum = 0.0, term;
printf("Enter the limit for the sum of series: ");
scanf("%d", &lim);
/*Any problems in the loop ? */
for (i = 1; i <= lim; i )
{
fact *= i;
term = 1. / fact; /* instead of 1/fact */
sum = term; /* instead of sum = fact */
}
printf("%f is the sum of the series\n", sum);
}
Enter the limit for the sum of series: 5
1.716667 is the sum of the series
There is a more subtle error. By instance, if you want lim = 50
,
Enter the limit for the sum of series: 50
inf is the sum of the series
The reason is that 50!
is way too big to be stored in an int
.
The solution is to compute directly 1/i!
using floating number (and not i!
using int
then 1/i!
)
A modified program, that also uses double
for an higher precision is :
#include <stdio.h>
void
main()
{
/*Any problems with the variables ?*/
int lim;
double sum = 0.0, term = 1.0;
printf("Enter the limit for the sum of series: ");
scanf("%d", &lim);
/*Any problems in the loop ? */
for (int i = 1; i <= lim; i )
{
term = term / i;
sum = term;
}
printf("%f is the sum of the series\n", sum);
}
that now works, even when lim=50
Do not be discouraged by these mistakes. These are mistakes we all made when we learned C !
Expected result:
exp(1) = exp(0) sum_{i=1}^\infty 1/i!
thus your expected result is exp(1)-exp(0) = 1.718281828459045....
CodePudding user response:
Try it with int main() once and let me know whether it is working or not