(*$I+,C-,S- **************************************** : : EXPONENT PROGRAM : : Ken Kuller donated this little program to the : Pascal/Z Users Group in case someone else needed a : benchmark program. : ***************************************************) Program Number_cruncher; Const zero = 0.0; epsilon = 0.00000001; one = 1.0; initial = -10.0; { First value in table } increment = 0.5; { Size of step } last = 10.0; { Last value in table } Var x, term : real; expo : real; n : integer; Function Series (last_term, X : real; var n : integer ) : real; { This function calculates "e to the x" by evaluating the series, } { whose terms are ( x**n ) / n!, and adding the them in order of } { increasing magnitude to reduce the truncation error. } Var term : real; Begin { Series } If x = zero then series := one else { x <> 0 } if last_term < epsilon then { solution is close enough } series := last_term else begin n := n + 1; term := last_term * x / n; series := series ( term, x, n ) + last_term end { last_term > epsilon } End; { function series } Function Reciprocal ( { inverts } parameter : real ) : real; Begin Reciprocal := one / parameter End; { Reciprocal } Function Exponent ( x : real ) : real; Begin If x < zero then exponent := reciprocal ( exponent ( -x ) ) else begin n := 0; term := one; exponent := series ( term, x, n ) end { else } End; { Exponent } Begin { main program } { write table heading } Writeln ( ' X E to the X' ); Writeln ( ' ===== ============' ); x := initial - increment; repeat x := x + increment; expo := exponent(x); writeln ( x :4 :1, expo :12 :6 ) until x = last end. .