How to compute 1/(2*i)?

Discussion in 'C++' started by Francogrex, Apr 6, 2008.

  1. Francogrex

    Francogrex Guest

    Hi, I have a problem with this very simple program:

    #include <iostream>
    #include <cmath>
    using namespace std;

    int main(){
    double n=16;
    double t=2.78;
    double x;
    x=(t/sqrt(n));
    int i=0;
    double u[9];
    while(i<8){
    u[0]=1;
    i=i+1;
    u=u[i-1]*((1-(1/(2*i)))/(1+(x*x)));
    cout <<"Iteration " <<i<<" is: "<<u<<"\n";
    }
    system("PAUSE");
    return 0;
    }

    OUTPUT IS:
    Iteration 1 is: 0.674297
    Iteration 2 is: 0.454677
    Iteration 3 is: 0.306588
    Iteration 4 is: 0.206731
    Iteration 5 is: 0.139398
    Iteration 6 is: 0.093996
    Iteration 7 is: 0.0633812
    Iteration 8 is: 0.0427378
    Press any key to continue . .

    But the output should read:
    0.337148733
    0.170503902
    0.095808624
    0.056528074
    0.034305063
    0.021204166
    0.013276636
    0.008392877

    the problem is that C++ is not doing this calculation 1/(2*i)
    correctly. Is there a way to force him to do this division other than
    using the brackets? Thanks.
     
    Francogrex, Apr 6, 2008
    #1
    1. Advertising

  2. Francogrex

    Francogrex Guest

    On Apr 6, 11:34 am, Francogrex <> wrote:
    > Hi, I have a problem with this very simple program:
    >
    > #include <iostream>
    > #include <cmath>
    > using namespace std;
    >
    > int main(){
    > double n=16;
    > double t=2.78;
    > double x;
    > x=(t/sqrt(n));
    > int i=0;
    > double u[9];
    > while(i<8){
    > u[0]=1;
    > i=i+1;
    > u=u[i-1]*((1-(1/(2*i)))/(1+(x*x)));
    > cout <<"Iteration " <<i<<" is: "<<u<<"\n";}
    >
    > system("PAUSE");
    > return 0;
    >
    > }
    >
    > OUTPUT IS:
    > Iteration 1 is: 0.674297
    > Iteration 2 is: 0.454677
    > Iteration 3 is: 0.306588
    > Iteration 4 is: 0.206731
    > Iteration 5 is: 0.139398
    > Iteration 6 is: 0.093996
    > Iteration 7 is: 0.0633812
    > Iteration 8 is: 0.0427378
    > Press any key to continue . .
    >
    > But the output should read:
    > 0.337148733
    > 0.170503902
    > 0.095808624
    > 0.056528074
    > 0.034305063
    > 0.021204166
    > 0.013276636
    > 0.008392877
    >
    > the problem is that C++ is not doing this calculation 1/(2*i)
    > correctly. Is there a way to force him to do this division other than
    > using the brackets? Thanks.


    ok i figured it out: if it's written 1.0/(2.0*i) it works. strange
    that you have to specify the points after the values, so by default c+
    + considers them as integers
     
    Francogrex, Apr 6, 2008
    #2
    1. Advertising

  3. Francogrex

    ciccio Guest

    Francogrex wrote:
    > On Apr 6, 11:34 am, Francogrex <> wrote:
    >> Hi, I have a problem with this very simple program:
    >>
    >> #include <iostream>
    >> #include <cmath>
    >> using namespace std;
    >>
    >> int main(){
    >> double n=16;
    >> double t=2.78;
    >> double x;
    >> x=(t/sqrt(n));
    >> int i=0;
    >> double u[9];
    >> while(i<8){
    >> u[0]=1;
    >> i=i+1;
    >> u=u[i-1]*((1-(1/(2*i)))/(1+(x*x)));
    >> cout <<"Iteration " <<i<<" is: "<<u<<"\n";}
    >>
    >> system("PAUSE");
    >> return 0;
    >>
    >> }
    >>
    >> OUTPUT IS:
    >> Iteration 1 is: 0.674297
    >> Iteration 2 is: 0.454677
    >> Iteration 3 is: 0.306588
    >> Iteration 4 is: 0.206731
    >> Iteration 5 is: 0.139398
    >> Iteration 6 is: 0.093996
    >> Iteration 7 is: 0.0633812
    >> Iteration 8 is: 0.0427378
    >> Press any key to continue . .
    >>
    >> But the output should read:
    >> 0.337148733
    >> 0.170503902
    >> 0.095808624
    >> 0.056528074
    >> 0.034305063
    >> 0.021204166
    >> 0.013276636
    >> 0.008392877
    >>
    >> the problem is that C++ is not doing this calculation 1/(2*i)
    >> correctly. Is there a way to force him to do this division other than
    >> using the brackets? Thanks.

    >
    > ok i figured it out: if it's written 1.0/(2.0*i) it works. strange
    > that you have to specify the points after the values, so by default c+
    > + considers them as integers


    Yep,

    And if you really want to get rid of the brackets, you type

    0.5/i

    The line you have
    u=u[i-1]*((1-(1/(2*i)))/(1+(x*x)));
    Should be
    u = u[i-1]*(1.0-0.5/i)/(1.0+x*x);

    If you work with floats or doubles, always define your constants as
    floats or doubles, even if they can be represented as an integer.

    The problem with yours was that 1/(2*i) = 0 (integer devisions)

    Regards
     
    ciccio, Apr 6, 2008
    #3
  4. Francogrex

    brian tyler Guest

    brian tyler, Apr 6, 2008
    #4
  5. Francogrex

    Francogrex Guest

    On Apr 6, 11:53 am, Alan Johnson <> wrote:
    > > the problem is that C++ is not doing this calculation 1/(2*i)
    > > correctly. Is there a way to force him to do this division other than
    > > using the brackets? Thanks.

    >
    > 1 and 2 are int literals, and i is defined as an int, so the expression
    > 1/(2*i) performs integer division.  The easiest way to force floating
    > point division is to make one of your literals a floating point number.
    > That is: 1/(2.*i)


    Hi thanks all. I just figured it out right after I posted. Sometimes
    it's worthwhile that I try and be patient before I post.
     
    Francogrex, Apr 6, 2008
    #5
  6. Francogrex

    stan Guest

    Francogrex wrote:
    > On Apr 6, 11:34 am, Francogrex <> wrote:
    >> Hi, I have a problem with this very simple program:
    >>
    >> #include <iostream>
    >> #include <cmath>
    >> using namespace std;
    >>
    >> int main(){
    >> double n=16;
    >> double t=2.78;
    >> double x;
    >> x=(t/sqrt(n));
    >> int i=0;
    >> double u[9];
    >> while(i<8){
    >> u[0]=1;
    >> i=i+1;
    >> u=u[i-1]*((1-(1/(2*i)))/(1+(x*x)));
    >> cout <<"Iteration " <<i<<" is: "<<u<<"\n";}
    >>
    >> system("PAUSE");
    >> return 0;
    >>
    >> }
    >>
    >> OUTPUT IS:
    >> Iteration 1 is: 0.674297
    >> Iteration 2 is: 0.454677
    >> Iteration 3 is: 0.306588
    >> Iteration 4 is: 0.206731
    >> Iteration 5 is: 0.139398
    >> Iteration 6 is: 0.093996
    >> Iteration 7 is: 0.0633812
    >> Iteration 8 is: 0.0427378
    >> Press any key to continue . .
    >>
    >> But the output should read:
    >> 0.337148733
    >> 0.170503902
    >> 0.095808624
    >> 0.056528074
    >> 0.034305063
    >> 0.021204166
    >> 0.013276636
    >> 0.008392877
    >>
    >> the problem is that C++ is not doing this calculation 1/(2*i)
    >> correctly. Is there a way to force him to do this division other than
    >> using the brackets? Thanks.

    >
    > ok i figured it out: if it's written 1.0/(2.0*i) it works. strange
    > that you have to specify the points after the values, so by default c+
    > + considers them as integers


    You do know that you can/should also move u[0]=1; outside the loop?
    Further, you can precalculate the denminator (1+(x*x)) since x isn't
    modified in the loop. It's probably more typical to see this type of
    thing written as a for loop vice a while.

    for (int i=0; i<9; ++i) {
    u = ....
    }
     
    stan, Apr 7, 2008
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Fabio G.

    How to compute 2^N in VHDL?

    Fabio G., May 30, 2004, in forum: VHDL
    Replies:
    3
    Views:
    1,667
    Fabio G.
    May 31, 2004
  2. =?Utf-8?B?c2tpcmtieQ==?=

    Problem using COMPUTE with SPROC on ASP Application

    =?Utf-8?B?c2tpcmtieQ==?=, Nov 1, 2004, in forum: ASP .Net
    Replies:
    1
    Views:
    308
    Scott Allen
    Nov 1, 2004
  3. =?Utf-8?B?UGF0cmljay5PLklnZQ==?=

    System.Web.HttpException: Cannot compute Count for a data source t

    =?Utf-8?B?UGF0cmljay5PLklnZQ==?=, Nov 4, 2004, in forum: ASP .Net
    Replies:
    4
    Views:
    5,646
    Scott Allen
    Nov 5, 2004
  4. Replies:
    0
    Views:
    321
  5. PerlFAQ Server
    Replies:
    0
    Views:
    287
    PerlFAQ Server
    Feb 2, 2011
Loading...

Share This Page