http://qs321.pair.com?node_id=652634


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

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.

Replies are listed 'Best First'.
Re^4: Exponential Function Programming
by ikegami (Patriarch) on Nov 23, 2007 at 18:44 UTC

    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...