Chinmay Vemuri
Chinmay Vemuri

Reputation: 199

Series: 1 + 1/3 + 1/5 +...upto N terms

I was recently asked this question in a programming test. I can't seem to understand why I am getting the answer '1'. I am a beginner in the C programming language.

Here is my code:

#include<stdio.h>
int main()
{
    float c = 0;
    int n, i = 1;
    printf("Enter the number here: ");
    n = getchar();
    while (i <= 2*n - 1)
    {
        c = c + (1/i);
        i = i + 2;
    }
    printf("%f", c);
}

I have already tried using a for loop, but the answer remains the same. Any help would be appreciated!

Upvotes: 7

Views: 2250

Answers (2)

Robert Andrzejuk
Robert Andrzejuk

Reputation: 5222

I agree with Adrian's answer.

Another issue is because of the way floating point numbers are represented in a system when they are added in arbitrary order, precision can be lost.

To have maximum precision, floating point numbers should be added from smallest first to largest last.

Upvotes: 3

Adrian Mole
Adrian Mole

Reputation: 51825

The problem in your code lies on this line:

c = c + (1/i);

Here, the operation performed inside the parentheses is integer division! So, when i has any value greater than 1, the result will be zero. This zero is then converted to a float value.

To force the compiler to use floating point division, use this:

c = c + (1.0/i);

Upvotes: 15

Related Questions