Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!npeer03.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!border3.nntp.dca.giganews.com!Xl.tags.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!local2.nntp.dca.giganews.com!nntp.earthlink.com!news.earthlink.com.POSTED!not-for-mail NNTP-Posting-Date: Sun, 15 Apr 2012 00:26:08 -0500 Message-ID: <4F8A5BF2.17C5@mindspring.com> Date: Sun, 15 Apr 2012 01:26:10 -0400 From: pete Reply-To: pfiland@mindspring.com Organization: PF X-Mailer: Mozilla 3.04Gold (WinNT; I) MIME-Version: 1.0 Newsgroups: sci.math.num-analysis,alt.lang.asm,comp.programming Subject: Re: Exp() function reloaded References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 88 X-Usenet-Provider: http://www.giganews.com NNTP-Posting-Host: 4.154.218.101 X-Trace: sv3-qybtIzi5SFenPLDSCvnBs+QlDG8CasO5HvIoSrsSsamHJ0XpIFVb42YOWIir6jV0mgkdns4FKvJT9de!GhR9MbWNOvsE8XKgtUasmw4xNi8H6yvTr61ovLrNM7YdI0lwxxgD4q/Jexe7D/GH0egHQxQoNRuE!IaXVk+FnzCA= X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly X-Postfilter: 1.3.40 X-Original-Bytes: 2983 X-Received-Bytes: 3124 Xref: csiph.com comp.programming:1470 hopcode wrote: > > Hi, > here my method for the exponentianal function e^x . > it is a mix of 2 fundamentals: > - Taylor series running at a 10 steps for decimals -1.0 < x < +1.0 > - a couple of basic rules of the logarithms. > it is ~40 lines of code (my Taylors's exp() code + main routine) > it accepts only +numbers for now, and makes no exaustive check > on the floats. for those and negative values i leave it to the > reader's creativity ( being e^-x essentially 1 / e^x ). I've code Taylors's exp(x) for both positive and negative x in C, using -1.0 < x < +1.0, but without making use of e^-x being essentially 1 / e^x. /* BEGIN new.c output */ fs_expl(20.3) is 654904512.153239 fs_expl(20.3) - 654904512.153230 is 8.583069e-006 fs_expl(-20.3) is 1.526940e-009 fs_expl(-20.3) - 1.526940e-009 is 1.591266e-016 /* END new.c output */ /* BEGIN new.c */ #include long double fs_expl(long double x) { long unsigned n, square; long double b, e, old; for (square = 0; x > 1; x /= 2) { ++square; } while (-1 > x) { ++square; x /= 2; } e = b = n = 1; do { b /= n++; b *= x; e += b; b /= n++; b *= x; old = e; e += b; } while (e > old); while (square-- != 0) { e *= e; } return e; } int main(void) { puts("/* BEGIN new.c output */\n"); printf("fs_expl(20.3) is %lf\n", fs_expl(20.3)); printf("fs_expl(20.3) - 654904512.153230 is %le\n\n", fs_expl(20.3) - 654904512.153230); printf("fs_expl(-20.3) is %le\n", fs_expl(-20.3)); printf("fs_expl(-20.3) - 1.526940e-009 is %le\n\n", fs_expl(-20.3) - 1.526940e-009); puts("/* END new.c output */"); return 0; } /* END new.c */ -- pete