This source file includes following definitions.
- test_function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 static void
18 test_function (void)
19 {
20 int i;
21 int j;
22 const DOUBLE TWO_MANT_DIG =
23
24
25
26 (DOUBLE) (1U << ((MANT_DIG - 1) / 5))
27 * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5))
28 * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5))
29 * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5))
30 * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5));
31
32
33 for (i = 0; i < SIZEOF (RANDOM); i++)
34 {
35 DOUBLE x = L_(16.0) * RANDOM[i];
36 DOUBLE y = SQRT (x);
37 DOUBLE err = y * y - x;
38 ASSERT (y >= L_(0.0));
39 ASSERT (err > - L_(16.0) / TWO_MANT_DIG
40 && err < L_(16.0) / TWO_MANT_DIG);
41 }
42
43 for (i = 0; i < SIZEOF (RANDOM) / 4; i++)
44 for (j = 0; j < SIZEOF (RANDOM) / 4; j++)
45 {
46 DOUBLE x = L_(16.0) * RANDOM[i];
47 DOUBLE y = L_(16.0) * RANDOM[j];
48 if (x > L_(0.0) && y > L_(0.0))
49 {
50 DOUBLE z = L_(1.0) / (x * y);
51
52 DOUBLE p = SQRT (x) * SQRT (y) * SQRT (z);
53 ASSERT (p > L_(1.0) - L_(4.0) / TWO_MANT_DIG
54 && p < L_(1.0) + L_(4.0) / TWO_MANT_DIG);
55 }
56 }
57 }
58
59 volatile DOUBLE x;
60 DOUBLE y;