~mingw-w64/mingw-w64/experimental

« back to all changes in this revision

Viewing changes to ros-privexp/mingw-w64-crt/testcases/t_float.c

  • Committer: NightStrike
  • Date: 2010-08-11 22:20:57 UTC
  • Revision ID: svn-v4:4407c894-4637-0410-b4f5-ada5f102cad1:experimental:3266
Branch for adding option for supporting ros

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <math.h>
 
2
#include <stdio.h>
 
3
#include <inttypes.h>
 
4
 
 
5
volatile long double in1 = -1.0L / 0.0L;
 
6
volatile long double in2 = 1.0L / 0.0L;
 
7
 
 
8
volatile long double ld1 = 3.51L;
 
9
volatile double ld2 = 3.51;
 
10
volatile float ld3 = 3.51F;
 
11
 
 
12
#define ARG1_FCT(NAME) \
 
13
  do {printf (#NAME ": %g %g %g\n", (double) NAME##l (ld1), \
 
14
    (double) NAME (ld2), \
 
15
    (double) NAME##f (ld3)); \
 
16
} while (0)
 
17
 
 
18
#define ARG2_FCT(NAME,VAL) \
 
19
  do {printf (#NAME ": %g %g %g\n", (double) NAME##l (ld1, VAL##L), \
 
20
    (double) NAME (ld2, VAL), \
 
21
    (double) NAME##f (ld3, VAL##f)); \
 
22
} while (0)
 
23
 
 
24
#define ARG3_FCT(NAME,VAL,VAL2) \
 
25
  do {printf (#NAME ": %g %g %g\n", (double) NAME##l (ld1, VAL##L, VAL2##L), \
 
26
    (double) NAME (ld2, VAL, VAL2), \
 
27
    (double) NAME##f (ld3, VAL##f, VAL2##f)); \
 
28
} while (0)
 
29
 
 
30
#define ARG2_FCTINT(NAME) \
 
31
  do {printf (#NAME ": %g %g %g\n", (double) NAME##l (ld1, 2), \
 
32
    (double) NAME (ld2, 2), \
 
33
    (double) NAME##f (ld3, 2)); \
 
34
} while (0)
 
35
 
 
36
#define ARG2_FCTPINT(NAME) \
 
37
  do { \
 
38
   int i = 0; \
 
39
   printf (#NAME ": %g", (double) NAME##l (ld1, &i)); \
 
40
   printf ("=%d", i); \
 
41
   printf (" %g", (double) NAME (ld2, &i)); \
 
42
   printf ("=%d", i); \
 
43
   printf (" %g", (double) NAME##f (ld3, &i)); \
 
44
   printf ("=%d\n", i); \
 
45
  } while(0)
 
46
  
 
47
#ifdef __WIN64__
 
48
#define printfmt PRIu64
 
49
#else
 
50
#define printfmt PRIu32
 
51
#endif
 
52
 
 
53
int main()
 
54
{
 
55
  printf ("sizeof(float)=%"printfmt", sizeof(double)=%"printfmt", sizeof(long double)=%"printfmt"\n", sizeof (float), sizeof(double), sizeof(long double));
 
56
  printf ("%g %g %g\n", (double) ld1, (double) ld2, (double) ld3);
 
57
 
 
58
  ARG1_FCT (sin);
 
59
  ARG1_FCT (cos);
 
60
  ARG1_FCT (tan);
 
61
  ARG1_FCT (sinh);
 
62
  ARG1_FCT (cosh);
 
63
  ARG1_FCT (tanh);
 
64
  ARG1_FCT (asin);
 
65
  ARG1_FCT (acos);
 
66
  ARG1_FCT (atan);
 
67
  ARG2_FCT (atan2, 0.5);
 
68
  ARG1_FCT (exp);
 
69
  ARG1_FCT (exp2);
 
70
  ARG2_FCT (pow, 2.0);
 
71
  ARG1_FCT (sqrt);
 
72
  ARG1_FCT (ceil);
 
73
  ARG1_FCT (floor);
 
74
  ARG1_FCT (fabs);
 
75
  // double __cdecl ldexp(double _X,int _Y);
 
76
  // double __cdecl frexp(double _X,int *_Y);
 
77
  // double __cdecl modf(double _X,double *_Y);
 
78
  ARG2_FCT(fmod, 2.5);
 
79
  ARG1_FCT (log1p);
 
80
  ARG1_FCT (log2);
 
81
  ARG1_FCT (logb);
 
82
  ARG1_FCT (tgamma);
 
83
  ARG1_FCT (lgamma);
 
84
  ARG1_FCT (erf);
 
85
  ARG1_FCT (erfc);
 
86
  ARG1_FCT (nearbyint);
 
87
  ARG1_FCT (rint);
 
88
  ARG1_FCT (lrint);
 
89
  ARG1_FCT (llrint);
 
90
  ARG1_FCT (lround);
 
91
  ARG1_FCT (llround);
 
92
 
 
93
  ARG1_FCT (log);
 
94
  ARG1_FCT (log10);
 
95
  ARG1_FCT (round);
 
96
  ARG1_FCT (trunc);
 
97
  ARG2_FCT (remainder, 2.0);
 
98
  ARG2_FCT (copysign, -1.0);
 
99
  ARG2_FCT (nexttoward, 0.5);
 
100
  ARG2_FCT (nexttoward, 0.5);
 
101
  ARG2_FCT (fdim, 0.5);
 
102
  ARG2_FCT (fmax, 0.5);
 
103
  ARG2_FCT (fmin, 0.5);
 
104
  ARG2_FCT (hypot, 1.5);
 
105
  ARG1_FCT (cbrt);
 
106
  ARG2_FCTPINT (frexp);
 
107
  ARG2_FCTINT (ldexp);
 
108
  ARG1_FCT (ilogb);
 
109
  ARG2_FCTINT (scalbn);
 
110
  ARG2_FCTINT (scalbln);
 
111
  ARG3_FCT (fma, 2.0, 1.5);
 
112
  printf ("%g is%s nan\n", (double) in1, isnan (in1) ? "" :" not");
 
113
  printf ("%g is%s inf\n", (double) in1, isinf (in1) ? "" :" not");
 
114
  __mingw_printf ("Ld:%Lg d:%g f:%g\n", ld1, ld2, (double) ld3);
 
115
 
 
116
  return 0;
 
117
}