//Write a C++ program to determine and print the sum of the series ( 1/6 + 1/10 + 1/14 + … + 1/(2*(2*n+1)) )for a given value of n. The value of n should be given interactively through the terminal. (Note: You will only get credit if you use a loop!)

so i have to find the sum and i have tried it for a while and i cant get it. im using this code and it works good if the series was (6+10+14+...+(2*(2*n+1)) ), but as soon as i try to put "1/(2*(2*n+1)) " i get a zero as the answer. i know its something simple since we are not that advanced in class but i still cant find it. thank you very much for any help.

#include <iostream>
#include <cmath>
using namespace std;
int main( void )

int iCount = 0, iMax = 0;
float iAns = 0;

cout << "Enter a positive integer for n:" << endl;
cin >> iMax;

for( iCount=1; iCount <= iMax; iCount++ )
iAns = iAns + 2*((iCount*2)+1) ; // the 2*((iCount*2)+1) works if the series was (6+10+14+...), and as soon as i put a 1/ in front of it instead of giving me the right answer it gives me 0.

cout << "The sum of this series is: " << iAns << endl;

return 1;

Edited by aviles: n/a

7 Years
Discussion Span
Last Post by sfuo

I'd suggest printing the sum at each iteration of the loop to see what is happening. If you can't get it, post code without any user input that produces a result that you are not expecting.


You have made the classic error, that always seems to trip up beginners: That is if you use integers, then you get integer arithmetic :

Consider this code:

std::cout<<"1/4 == "<<1/4<<std::endl;

That will print the unexpected value: 0. That is because 1 and 4 are both integers and fractions cannot be represented in an integer value, therefore they are truncated.

In you code you sum up the result into a float. This does not help:

float F=1/4; 
std::cout<<"Look f is still 0 == "<<F<<std::endl;

That is because the division is done before the conversion type is examined.

However, this is different:

float F=1.0/4;

Since 1.0 is a double and the integer is converted into the double.

So in short use 1.0 instead of 1.


The way you are doing it says int/int*(int*int)+int you want everything multiplied to be a float otherwise it converts it to an int.

1/2 gives the answer 0 because integers do not have decimals.
1.0/2.0 gives the answer 0.5 because doubles/floats do have decimals.

So the way to write what you want is 1.0/float(2*(iCount*2+1));

Since you know that iCount is always an integer you dont have to multiply by a float or add by a float but you have to convert all that into a float and put it under 1.0

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.