1 ! :folding=indent:collapseFolds=0:
5 ! Copyright (C) 2004 Slava Pestov.
7 ! Redistribution and use in source and binary forms, with or without
8 ! modification, are permitted provided that the following conditions are met:
10 ! 1. Redistributions of source code must retain the above copyright notice,
11 ! this list of conditions and the following disclaimer.
13 ! 2. Redistributions in binary form must reproduce the above copyright notice,
14 ! this list of conditions and the following disclaimer in the documentation
15 ! and/or other materials provided with the distribution.
17 ! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18 ! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19 ! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 ! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 ! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 ! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 ! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 ! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 : fib ( n -- nth fibonacci number )
37 ! This is the naive implementation, for benchmarking purposes.
41 pred dup fib swap pred fib +
45 ! This is the naive implementation, for benchmarking purposes.
46 1 swap [ succ * ] times* ;
49 1 swap [ 2 * ] times ;
51 : harmonic ( n -- 1 + 1/2 + 1/3 + ... + 1/n )
52 0 swap [ succ recip + ] times* ;
55 #! Returns the magnitude of the vector (x,y).
56 swap sq swap sq + fsqrt ;
59 #! Compute the complex absolute value.
62 : conjugate ( z -- z* )
66 #! Compute the complex argument.
67 >rect swap fatan2 ; inline
69 : >polar ( z -- abs arg )
70 >rect 2dup mag2 transp fatan2 ;
72 : cis ( theta -- cis )
73 dup fcos swap fsin rect> ;
75 : polar> ( abs arg -- z )