thanks WaterStreet
i`d tried CDbl but the answer is still wrong.
for example x=2,n=3 the answer should be e^2=6.3333
i think there are something wrong with the formulas for t1,tn
Main Topics
Browse All TopicsIn inputbox input x and n
exponential function : e^x=1+ x/1! + x^2/2! +.....x^n/n! ; n!=1*2*3...*n
inside the function we can use t(n)=x^n/n! and for recurrence formula t(n)=t(n-1)*x/n
The partial sum to the n-th clause is expressed with s(n) which is ; s(n)=s(n-1)+t(n)
then e=1+s(n)
the calculation will repeat until i=n and |t(n)|<0.001
the problem is when i run the program the answer is no same with the exponential function above.
Sub e2()
Dim n As Double
Dim x As Double
Dim i As Double
Dim tn As Double
Dim sn As Double
Dim t1 As Double
Dim e As Double
x = CInt(InputBox("x?"))
n = CInt(InputBox("n?"))
Do
For i = 1 To n
t1 = x / (n - 1)
tn = (x / (n - 1)) * (x / n)
sn = tn + t1
e = 1 + sn
If x = 0 Then Exit For
Next i
Loop Until tn < 0.001 Or -tn < 0.001
MsgBox "e^" & CStr(x) & "=" & CStr(e)
End Sub
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
Sub e2()
Dim n As Double
Dim x As Double
Dim e As Double
Dim Laste As Double
x = CInt(InputBox("x?"))
e = 1
x = 3
n = 1
Do
Laste = e
e = e + x ^ n / Factorial(n)
n = n + 1
Loop While Abs(e - Laste) > 0.0000001
MsgBox "e^" & x & "=" & e
End Sub
Public Function Factorial(ByRef Value As Double) As Double
If Value = 1 Then
Factorial = 1
Exit Function
Else
Factorial = Value * Factorial(Value - 1)
End If
End Function
Kevin
here's a solution that avoids using the ^ operator, there's not much point in doing that, cos you could hard code e as a constant and do e^n in code.
Anyway, your keeping of a running total for the value seemed to be in error.
Dim n As Double
Dim x As Double
Dim i As Double
Dim tn As Double
Dim sn As Double
Dim t1 As Double
Dim e As Double
x = CInt(InputBox("x?"))
n = CInt(InputBox("n?"))
e = 0
tn = 1
e = e + tn
'now e is the first term in the taylor expansion (call this term 0)
Do
'add on term 1, 2, 3
i = i + 1
tn = tn * x / i 'this gets the next term from the last
e = e + tn
'If x = 0 Then Exit For - not needed, gives tn=0 when x = 0, so it ends below
'the end ing condition wasn't true
Loop Until tn < 0.001 And tn >= 0 Or -tn < 0.001 And tn <= 0
msgbox ("e^" & CStr(x) & "=" & CStr(e))
thanks Kevin.
i`d tried your solution and it is working!!!however i have to make the program by using the
functions in the question.
Actually i found that i misunderstood the question.This is the question again ;
Exponential function : e^x=1+ x/1! + x^2/2! +.....x^n/n! ; n!=1*2*3...*n
Inside the function we can use t(n)=x^n/n! and for recurrence formula t(n)=t(n-1)*x/n
The partial sum to the n-th clause is expressed with s(n) which is ; s(n)=s(n-1)+t(n)
Then e=1+s(n)
The calculation will repeat until n=100 and |t(n)|<0.001
Sub e21()
Dim x As Double
Dim n As Double
Dim i As Double
Dim t1 As Double
Dim tn As Double
Dim sn As Double
Dim e As Double
x = CDbl(InputBox("x?"))
Do
For n = 1 To 100
t1 = x / (n - 1)
tn = (x / (n - 1)) * (x / n)
sn = tn + t1
e = 1 + sn
If x = 0 Then Exit For
Next n
Loop Until tn < 0.001 Or -tn < 0.001
MsgBox "e^" & CStr(x) & "=" & CStr(e)
End Sub
I`d tried to run the program but it comes into debug.
For example if x=3
e^3=20.0855....
your calculation of the terms in the series is not right. The first term has to be calculated before you go into the loop, but that's always 1.
t0 = 1
t1 = t0 * x / 1
t2 = t1 * x / 2
t3 = t2 * x / 3
t(n) = t(n-1) * x / n
but you don't want to store all those values, you want to calculate the next term from the previous and throw away the old one - so lets call the nth term variable 'tn'
first consider this
----------------------
dim
x=2
tn = 1
for n = 1 to 10
tn = tn * x/n
msgbox("term " + cstr(n) + " = " + cstr(tn))
next
-------------
so looking at the code above, I calculate each of the first 10 term in the series. But I want to add them all up, including t0, so then I need running_total
-------------
x=2
tn = 1
running_total = tn
for n = 1 to 100
tn = tn * x/n
running_total = running_total + tn
next
----------------------
'at
do you see what this bit does
tn = tn * x/n
it takes the last term and works out the latest term from it.
Thanks deighton ;
I`d changed my program by referring your functions and it works.
But how can i make that program to calculate until abs(tn)<0.0001?
I did `Step Into ` and in `Locals Window` when Abs(tn)<0.0001 it should
stop running,but it still run until n=100.
Sub ee()
Dim x As Double
Dim n As Double
Dim tn As Double
Dim running_total As Double
x = CDbl(InputBox("x"))
tn = 1
running_total = tn
Do
For n = 1 To 100
tn = tn * x / n
running_total = running_total + tn
Next n
Loop Until Abs(tn) < 0.00001
MsgBox CStr(running_total)
End Sub
if you look at that, you have a for loop 'nested' in the Do loop, so you will always do 100 iterations, then you will break out of the second loop only if abs(tn) < .00001,
if you get rid of the do loop and have
For n = 1 To 100
tn = tn * x / n
running_total = running_total + tn
if Abs(tn) < 0.00001 then exit for
Next n
you will iterate for a maximum of 100 times, but leaving the loop if tn < .00001
is one way of doing that
you could also use a do loop with a counter and the loop until n>100 or abs(tn)<.000001
Business Accounts
Answer for Membership
by: WaterStreetPosted on 2008-11-17 at 21:35:42ID: 22982247
instead of
x = CInt(InputBox("x?"))
n = CInt(InputBox("n?"))
try
x = CDbl(InputBox("x?"))
n = CDbl(InputBox("n?"))