Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: Deriving pi and e

by pg (Canon)
on Oct 25, 2003 at 07:40 UTC ( [id://302040] : note . print w/replies, xml ) Need Help??


in reply to Deriving pi and e

Interesting... but in real life one would simply say:

print atan2(1,1) * 4, "\n"; print exp(1);

Replies are listed 'Best First'.
•Re: Re: Deriving pi and e
by merlyn (Sage) on Oct 25, 2003 at 12:40 UTC
    I'm not sure why people keep propogating the one where you have to multiply by 4. It's much simpler to say:
    my $pi = atan2(0,-1);
    In other words, don't create a vector that points at 45 degrees and multiply by 4... create a vector that points at 180 degrees!

    -- Randal L. Schwartz, Perl hacker
    Be sure to read my standard disclaimer if this is a reply.

      Personally I do it for the reason that theorbtwo stated. I know how to do it with atan (and make the well-known power series converge), and the easiest way is to do 45 degrees and multiply by 4. Then I try to convert it to Perl, notice that there is no atan function, and use atan2.

      That said, noting that I can do it directly with atan2 won't convince me not to reach for 4*atan2(1,1) for several reasons:

      1. I don't have this memorized, just the derivation of how it should work. I have more years of math than Perl, and so the derivation I know is the one that comes up immediately.
      2. Perl's documentation doesn't indicate whether atan(0,-1) will give you PI or -PI (or blow up because someone decided that "in the range of -PI to PI" means an open interval, not a half-closed one). I therefore don't know whether to trust it in future implementations of Perl.
      3. Even though I have had it pointed out to me that Perl's implementation gives you PI, I don't know whether I can trust that trivia in future implementations of atan2 that I may encounter in other languages. This goes doubly because I know enough about how one might try to implement atan2 to come up with plausible implementations which break at (0,-1).

        I agree. Actually, it's imo better to define atan2(0,-1)=-Pi, so that atan2's range would be [-Pi,Pi), not (-Pi,Pi] (not that this would matter at all). Actually, even my prof at complex functions course defined it this way: log(-1)=-i*Pi.

        I use 4*atan2(1,1) instead of atan2(0,-1) or 2*atan2(1,0), because I got used to bc and basic, where you have to write 4*a(1), and 4*atn(1) resp., because there is no atan2 function.

      Er, I suspect the reason is that people forget that you can do that with atan2. (You can't do that with a normal atan, IIRC...)

      In any case, yes, it is a little silly.


      Warning: Unless otherwise stated, code is untested. Do not use without understanding. Code is posted in the hopes it is useful, but without warranty. All copyrights are relinquished into the public domain unless otherwise stated. I am not an angel. I am capable of error, and err on a fairly regular basis. If I made a mistake, please let me know (such as by replying to this node).

      Well, your method is logical but one advantage of atan(1,1)*4 would be that there is reduced scope to get the argument order or signs wrong. (1,1) is easy to remember but (0,-1) could get mixed up with (1,0), (-1,0) or (0,1) by the sieve-headed amongst us. Never under-estimate sieve-headedness! :-D