Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^2: Exponential Function Programming

by ikegami (Patriarch)
on Nov 22, 2007 at 20:21 UTC ( #652444=note: print w/replies, xml ) Need Help??


in reply to Re: Exponential Function Programming
in thread Exponential Function Programming

$ret - $d != $ret is interesting. One would think it's the same as $d (in boolean context), but it isn't. By testing the effect of $d ($ret - $d != $ret) instead of $d itself, the loop can be ended sooner.
my $ret = 1; for my $d (1e-15, 1e-20) { printf("%g %d %d\n", $d, ( $d )?1:0, ( $ret-$d != $ret )?1:0, ); }
1e-015 1 1 # Often equivalent. 1e-020 1 0 # But not when there's an underflow.

Replies are listed 'Best First'.
Re^3: Exponential Function Programming
by pajout (Curate) on Nov 23, 2007 at 18:21 UTC
    Of course, underflow behaves friendly in this case. But my prime goal was to demonstrate no necessity for evaluating both factorial and power in each loop.

      But such a demonstrations wasn't necessary for me since I had finished writing the following from scratch before you posted your solution. (I didn't post it since I didn't want to do the OP's homework for him.)

      sub ikegami_exp { my ($x) = @_; my $last = 0; my $result = 1; my $acc = 1; for (my $n = 1; abs($result-$last)>0; $n++) { $last = $result; $acc *= $x/$n; $result += $acc; } return $result; } for (1, 0.1, 10, 3.14, 0.1234, 100) { printf("%.16e: exp() = %.16e ikegami_exp() = %.16e\n", $_, exp($_), ikegami_exp($_), ); }

      The only difference was the terminating condition, so naturally, that's what interested me :) Mine goes into an infinite loop if you try to find ikegami_exp(1000), but that's easily fixed by replacing abs($result-$last)>0 with $result != $last.

        Yep :>)
        I have decided to post it because my experience is that such tiny codes could initiate interest. Additionally, if somebody will present it as homework, there is a big risk that question "How it works" will appear...

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://652444]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2022-01-26 15:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    In 2022, my preferred method to securely store passwords is:












    Results (69 votes). Check out past polls.

    Notices?