summaryrefslogtreecommitdiff
path: root/fpcsrc/tests/bench/shootout/src/partialsums.pp
blob: 1ab5d53d98439589879bff6ac340f9cb1f7801c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
(* The Computer Language Shootout
   http://shootout.alioth.debian.org/
   contributed by Josh Goldfoot *)

program partialSums;

uses SysUtils, Math;
const
   twoThirds = 2.0 / 3.0;
var
   n, code, k: longint;
   sum1, sum2, sum3, sum4, sum5, sum6, sum7, sum8, sum9, k3, sink, cosk, a: double;

begin
   if paramCount() = 1
      then Val (ParamStr (1),n,Code)
      else n := 25000;
   a := -1.0;
   for k := 1 to n do
   begin
      k3 := intpower(k, 3);
      sink := sin(k);
      cosk := cos(k);
      a := -a;
      sum1 := sum1 + intpower(twoThirds,k - 1);
      sum2 := sum2 + 1.0 /sqrt(k);
      sum3 := sum3 + 1.0/(k*(k+1.0));
      sum4 := sum4 + 1.0/(k3*(sink*sink));
      sum5 := sum5 + 1.0/(k3*(cosk*cosk));
      sum6 := sum6 + 1.0/k;
      sum7 := sum7 + 1.0/intpower(k, 2);
      sum8 := sum8 + a/k;
      sum9 := sum9 + a/(k + k - 1.0 );
   end;

   writeLn(sum1:10:9, #9, '(2/3)^k');
   writeLn(sum2:10:9, #9,'k^-0.5');
   writeLn(sum3:10:9, #9,'1/k(k+1)');
   writeLn(sum4:10:9, #9,'Flint Hills');
   writeLn(sum5:10:9, #9,'Cookson Hills');
   writeLn(sum6:10:9, #9,'Harmonic');
   writeLn(sum7:10:9, #9,'Riemann Zeta');
   writeLn(sum8:10:9, #9,'Alternating Harmonic');
   writeLn(sum9:10:9, #9,'Gregory');
end.