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
|
/* Copyright (C) 2003 Free Software Foundation.
by Roger Sayle <roger@eyesopen.com>, derived from mzero3.c
Constant folding of sin(-0.0), tan(-0.0) and atan(-0.0) should
all return -0.0, for both double and float forms. */
void abort (void);
typedef __SIZE_TYPE__ size_t;
extern int memcmp (const void *, const void *, size_t);
double sin (double);
double tan (double);
double atan (double);
float sinf (float);
float tanf (float);
float atanf (float);
void expectd (double, double);
void expectf (float, float);
void
expectd (double value, double expected)
{
if (value != expected
|| memcmp ((void *)&value, (void *) &expected, sizeof (double)) != 0)
abort ();
}
void
expectf (float value, float expected)
{
if (value != expected
|| memcmp ((void *)&value, (void *) &expected, sizeof (float)) != 0)
abort ();
}
int main ()
{
expectd (sin (0.0), 0.0);
expectd (tan (0.0), 0.0);
expectd (atan (0.0), 0.0);
expectd (sin (-0.0), -0.0);
expectd (tan (-0.0), -0.0);
expectd (atan (-0.0), -0.0);
expectf (sinf (0.0f), 0.0f);
expectf (tanf (0.0f), 0.0f);
expectf (atanf (0.0f), 0.0f);
expectf (sinf (-0.0f), -0.0f);
expectf (tanf (-0.0f), -0.0f);
expectf (atanf (-0.0f), -0.0f);
return 0;
}
|