Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game. 
Notices 
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto 
Site FAQ 
Sitemap 
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQrelated cookies.

Introduction to Linux  A Hands on Guide
This guide was created as an overview of the Linux Operating System, geared toward new users as an exploration tour and getting started guide, with exercises at the end of each chapter.
For more advanced trainees it can be a desktop reference, and a collection of the base knowledge needed to proceed with system and network administration. This book contains many real life examples derived from the author's experience as a Linux system and network administrator, trainer and consultant. They hope these examples will help you to get a better understanding of the Linux system and that you feel encouraged to try out things on your own.
Click Here to receive this Complete Guide absolutely free. 


07232007, 11:45 PM

#1

Member
Registered: Oct 2005
Posts: 162
Rep:

Calculate e^x in Java
I'm trying to calculate e^x, without any builtin functions such as Math.exp. This is what I have so far:
Code:
public static double math_ex(int iter, int x) {
double ex = 0;
int i = 1;
while(i <= iter) {
if (i == 1) {
ex += x;
} else {
ex += Math.pow(x,(double)i/factorial(i));
}
i++;
}
ex += 1;
return ex;
}
My input is:
Code:
Enter iterations:
6
Enter x:
3
e^3 = 11.989024
But when I use the calculator to figure it out, it is 20.0855........
Can you see anything thats wrong with my function?
Thanks.



07242007, 06:06 AM

#2

Senior Member
Registered: Jan 2005
Location: Roodepoort, South Africa
Distribution: Slackware 10.1/10.2/12, Ubuntu 12.04, Crunchbang Statler
Posts: 3,786

Not a java programmer, but if Math.exp is a built=in function, I assume that Math.pow is as well.
Don't know what is wrong with your code, but is simple multiplying in a loop not easier.
something like
Code:
result=1;
while(iter)
result *= x;
return result;
This is not bug free.
[edit]
OK, it's still vague but the factorial is probably to calculate e; so calculate e first and fill it in in place of x. Will be a bit faster as well as you only have to calculate e once.[/edit]
Last edited by Wim Sturkenboom; 07242007 at 06:20 AM.



07242007, 06:29 AM

#3

LQ Newbie
Registered: Nov 2006
Location: Russia
Distribution: OpenSuSE 10.2
Posts: 1
Rep:

Quote:
Originally Posted by ckoniecny
Code:
ex += Math.pow(x,(double)i/factorial(i));

This line should be
Code:
ex += Math.pow(x,(double)i)/factorial(i);
according to the series e^x=1+x+x^2/2!+...+x^n/n!
(not x^(n/n!) )



07242007, 06:31 AM

#4

LQ Veteran
Registered: Nov 2005
Location: Annapolis, MD
Distribution: Arch/XFCE
Posts: 17,802

What is the algorithm that you intended to code? (I just ran the numbers by hand and it clearly is not converging on the right answer)



07242007, 10:22 PM

#5

Member
Registered: Jun 2006
Location: Texas
Distribution: Ubuntu
Posts: 207
Rep:

Quote:
Originally Posted by pixellany
What is the algorithm that you intended to code? (I just ran the numbers by hand and it clearly is not converging on the right answer)

It looks like it's supposed to be the MacLaurin series sum(x**n / n! for n in {0, 1, 2, ...}).



07242007, 10:27 PM

#6

Member
Registered: Jun 2006
Location: Texas
Distribution: Ubuntu
Posts: 207
Rep:

BTW, what type does your factorial function use? Because of overflow, "int" is only accurate up to n=12, and even "long" only gets you to n=20.



07252007, 10:28 AM

#7

Senior Member
Registered: Sep 2003
Posts: 3,171
Rep:

In addition to changing it as oami specified, you have to either start i at 0 or add one to the result.



Thread Tools 
Search this Thread 


Posting Rules

You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off



All times are GMT 5. The time now is 05:00 AM.

LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.

Latest Threads
LQ News

