summaryrefslogtreecommitdiff
path: root/fpcsrc/packages/numlib/tests/roof1rte.pas
blob: 3ed341cd2743cc30e66ccbdcbef952409a14deaf (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
program roof1rte;

uses
  typ,
  spe,
  roo;

const
  num = 4;
var
  term, i, j, n, p: ArbInt;
  a, b, ae, re, x:  ArbFloat;

  function f(x: ArbFloat): ArbFloat;
  begin
    case i of
      1: f := spepow(x - 1, 3);
      2: f := cos(x);
      3: f := sin(x) - x / 2;
      4: f := exp(x) - sqr(sqr(x))
    end;
  end;

begin
  Write(' program results roof1rte');
  case sizeof(ArbFloat) of
    4: writeln('(single)');
    6: writeln('(real)');
    8: writeln('(double)');
  end;
  writeln;
  writeln(' number of examples:', num: 3);
  writeln;
  if sizeof(ArbFloat) = 6 then
    p := 8
  else
    p := 10;
  writeln(' ': 2, 'a', ' ': 5, 'b', ' ': 5, 'ae', ' ': p, 're',
    ' ': p - 2, 'term', ' ': 2, 'root', ' ': numdig - 2, 'f(root)');
  for i := 1 to num do
  begin
    Write('Locating the root of the equation ');
    case i of
      1: writeln('(x-1)**3 = 0');
      2: writeln('cos(x) = 0');
      3: writeln('sin(x) = x/2');
      4: writeln('exp(x)=x**4');
    end;
    Read(n);
    for j := 1 to n do
    begin
      Read(a, b, ae, re);
      roof1r(@f, a, b, ae, re, x, term);
      Write(a: 4: 1, ' ': 2, b: 4: 1, ' ': 2, ae: p, ' ': 2, re: p, ' ': 2, term: 1);
      if term < 3 then
        writeln(' ': 2, x: numdig, ' ': 2, f(x): numdig)
      else
        writeln;
    end;
  end;
  Close(input);
  Close(output);
end.
program roof1rte;

uses
  typ,
  spe,
  roo;

const
  num = 4;
var
  term, i, j, n, p: ArbInt;
  a, b, ae, re, x:  ArbFloat;

  function f(x: ArbFloat): ArbFloat;
  begin
    case i of
      1: f := spepow(x - 1, 3);
      2: f := cos(x);
      3: f := sin(x) - x / 2;
      4: f := exp(x) - sqr(sqr(x))
    end;
  end;

begin
  Write(' program results roof1rte');
  case sizeof(ArbFloat) of
    4: writeln('(single)');
    6: writeln('(real)');
    8: writeln('(double)');
  end;
  writeln;
  writeln(' number of examples:', num: 3);
  writeln;
  if sizeof(ArbFloat) = 6 then
    p := 8
  else
    p := 10;
  writeln(' ': 2, 'a', ' ': 5, 'b', ' ': 5, 'ae', ' ': p, 're',
    ' ': p - 2, 'term', ' ': 2, 'root', ' ': numdig - 2, 'f(root)');
  for i := 1 to num do
  begin
    Write('Locating the root of the equation ');
    case i of
      1: writeln('(x-1)**3 = 0');
      2: writeln('cos(x) = 0');
      3: writeln('sin(x) = x/2');
      4: writeln('exp(x)=x**4');
    end;
    Read(n);
    for j := 1 to n do
    begin
      Read(a, b, ae, re);
      roof1r(@f, a, b, ae, re, x, term);
      Write(a: 4: 1, ' ': 2, b: 4: 1, ' ': 2, ae: p, ' ': 2, re: p, ' ': 2, term: 1);
      if term < 3 then
        writeln(' ': 2, x: numdig, ' ': 2, f(x): numdig)
      else
        writeln;
    end;
  end;
  Close(input);
  Close(output);
end.