Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: How to calculate exponential of a function

  1. Jun 17, 2010 #1


    I have to calculate the exponetial of a large (on the order of 10^5) negative number. I tried using exp(), the exponential function from the cmath library, but I get an answer of 0. So, I tried to use the power series for the exponential function. For numbers from -1 to -14, I get answers which are accurate (within the percentage error set in the while statement). But for any number above -14, the answer diverges from the true value. For a number as small as 10^-5, the answer is a large positive number (which is nonsenical).

    Please help me understand what's wrong with the code, if anything, and how it can be improved. (Or is there another better way to calculate the exp of a large -ve number?)







    Code (Text):



    #include <iostream>
    #include <cmath>
    using namespace std;
    int main()
    {
        double t = - 16;  // t is the argument of the exponential function.
        double fsum = 1.0; // fsum is the cumulative sum in the calc of the answer.
        double fbefore = fsum; // to be used for the while statement
        int n = 1;             // n is the denominator of the power series
        double comparing;      // to be used in the while statement
        int iterations = 0;    
        double term = 1;        // each additional term in the series.
        do
        {
            iterations = iterations + 1;
            cout << iterations << endl;
            term = term * ( t/n );
            fsum = fsum + term;
            n = n + 1;
            double fafter = fsum;
            comparing = (fbefore - fafter)/fbefore;
            fbefore = fafter;
            cout << fsum << endl;
        }
        while ( abs(comparing) > 0.0000000001);

     
     
  2. jcsd
  3. Jun 17, 2010 #2
    It seems like this is just a rounding problem.

    Why not try calculating 1/e^x , where x is very small (i.e. -16). Taking n steps in the sum you would obtain

    [tex]\frac{1}{e^x} = \frac{1}{x^n} \cdot \left( 1/\left[\frac{1}{x^n} + \frac{1}{x^{n-1}} + ... + 1\right]\right)[/tex]. The idea being that [tex]\frac{1}{x^n}[/tex] is very small for sufficiently large n, and so has little effect on[tex]\left[\frac{1}{x^n} + \frac{1}{x^{n-1}} + ... + 1\right][/tex].
     
    Last edited: Jun 17, 2010
  4. Jun 17, 2010 #3
    For example you want to find
    [tex]y=e^{-16}[/tex]
    [tex]lg(y)=-16lg(e)=-16*0.4343=-6.949=-7+0.051[/tex]
    [tex]y=10^{-7}10^{0.051}=1.125*10^{-7}[/tex]
    You may calculate with any accuracy.
     
  5. Jun 18, 2010 #4
    I understand that very well. Thank you! But I am wondering whether it would be possible to calculate the exponent of -10^5.
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook