]>
Commit | Line | Data |
---|---|---|
28f540f4 RM |
1 | #include <stdio.h> |
2 | #include <math.h> | |
3 | #include <stdlib.h> | |
1521668f RM |
4 | #include <errno.h> |
5 | #include <string.h> | |
28f540f4 RM |
6 | |
7 | void print_trig_stuff __P ((void)); | |
8 | ||
9 | int | |
cc3fa755 | 10 | main (int argc, char *argv[]) |
28f540f4 | 11 | { |
ebbad4cc | 12 | const char str[] = "123.456"; |
28f540f4 RM |
13 | double x,h,li,lr,a,lrr; |
14 | ||
cc3fa755 UD |
15 | if (signbit (argc < 1 ? -0.0 : 0.0)) |
16 | /* I don't make this an error for now. --drepper */ | |
17 | fputs ("\n*** Your compiler has a bug. Consider upgrading\n\n", stderr); | |
18 | ||
28f540f4 | 19 | x = atof (str); |
1521668f | 20 | |
28f540f4 | 21 | printf ("%g %g\n", x, pow (10.0, 3.0)); |
1521668f | 22 | |
28f540f4 | 23 | x = sinh(2.0); |
1521668f | 24 | |
28f540f4 | 25 | printf("sinh(2.0) = %g\n", x); |
1521668f | 26 | |
28f540f4 | 27 | x = sinh(3.0); |
1521668f | 28 | |
28f540f4 | 29 | printf("sinh(3.0) = %g\n", x); |
1521668f | 30 | |
28f540f4 | 31 | h = hypot(2.0,3.0); |
1521668f | 32 | |
28f540f4 | 33 | printf("h=%g\n", h); |
1521668f | 34 | |
28f540f4 | 35 | a = atan2(3.0, 2.0); |
1521668f | 36 | |
28f540f4 | 37 | printf("atan2(3,2) = %g\n", a); |
1521668f | 38 | |
28f540f4 | 39 | lr = pow(h,4.0); |
1521668f | 40 | |
28f540f4 | 41 | printf("pow(%g,4.0) = %g\n", h, lr); |
1521668f | 42 | |
28f540f4 | 43 | lrr = lr; |
1521668f | 44 | |
28f540f4 | 45 | li = 4.0 * a; |
1521668f | 46 | |
28f540f4 | 47 | lr = lr / exp(a*5.0); |
1521668f | 48 | |
28f540f4 | 49 | printf("%g / exp(%g * 5) = %g\n", lrr, a, lr); |
1521668f | 50 | |
28f540f4 | 51 | lrr = li; |
1521668f | 52 | |
28f540f4 | 53 | li += 5.0 * log(h); |
1521668f | 54 | |
28f540f4 | 55 | printf("%g + 5*log(%g) = %g\n", lrr, h, li); |
1521668f | 56 | |
28f540f4 | 57 | printf("cos(%g) = %g, sin(%g) = %g\n", li, cos(li), li, sin(li)); |
1521668f | 58 | |
28f540f4 RM |
59 | x = drem(10.3435,6.2831852); |
60 | ||
61 | printf("drem(10.3435,6.2831852) = %g\n", x); | |
62 | ||
63 | x = drem(-10.3435,6.2831852); | |
64 | ||
65 | printf("drem(-10.3435,6.2831852) = %g\n", x); | |
66 | ||
67 | x = drem(-10.3435,-6.2831852); | |
1521668f | 68 | |
28f540f4 RM |
69 | printf("drem(-10.3435,-6.2831852) = %g\n", x); |
70 | ||
71 | x = drem(10.3435,-6.2831852); | |
72 | ||
73 | printf("drem(10.3435,-6.2831852) = %g\n", x); | |
74 | ||
75 | ||
76 | printf("x%8.6gx\n", .5); | |
77 | printf("x%-8.6gx\n", .5); | |
78 | printf("x%6.6gx\n", .5); | |
79 | ||
80 | { | |
81 | double x = atof ("-1e-17-"); | |
82 | printf ("%g %c= %g %s!\n", | |
83 | x, | |
84 | x == -1e-17 ? '=' : '!', | |
85 | -1e-17, | |
86 | x == -1e-17 ? "Worked" : "Failed"); | |
87 | } | |
88 | ||
89 | print_trig_stuff (); | |
90 | ||
91 | return 0; | |
92 | } | |
93 | \f | |
94 | ||
ebbad4cc | 95 | const double RAD[5] = { 0, M_PI/2, M_PI, (3*M_PI)/2, 2*M_PI }; |
28f540f4 RM |
96 | |
97 | #define PRINT_IT_1_ARG(_func, _arg, _value) \ | |
ebbad4cc | 98 | (_value) = (_func) ((_arg)); \ |
28f540f4 RM |
99 | if (errno) { \ |
100 | errno = 0; \ | |
ebbad4cc | 101 | printf ("%s = ERROR %s\n", #_func, strerror (errno)); \ |
28f540f4 | 102 | } else \ |
ebbad4cc | 103 | printf ("%s(%g) = %g\n", #_func, _arg, (_value)); \ |
28f540f4 RM |
104 | |
105 | #define PRINT_IT_2_ARG(_func, _arg1, _arg2, _value) \ | |
ebbad4cc | 106 | (_value) = (_func) ((_arg1),(_arg2)); \ |
28f540f4 RM |
107 | if (errno) { \ |
108 | errno = 0; \ | |
ebbad4cc | 109 | printf ("%s = ERROR %s\n", #_func, strerror (errno)); \ |
28f540f4 | 110 | } else \ |
ebbad4cc | 111 | printf ("%s(%g, %g) = %g\n", #_func, _arg1, _arg2, (_value)); \ |
28f540f4 RM |
112 | |
113 | void | |
ebbad4cc | 114 | print_trig_stuff(void) |
28f540f4 RM |
115 | { |
116 | double value, arg1, arg2; | |
117 | int i; | |
118 | ||
119 | puts ("\n\nMath Test"); | |
120 | ||
121 | errno = 0; /* automatically reset on error condition */ | |
122 | for (i=0; i<4; i++) | |
123 | { | |
124 | PRINT_IT_1_ARG (sin, RAD[i], value); | |
125 | PRINT_IT_1_ARG (cos, RAD[i], value); | |
126 | PRINT_IT_1_ARG (tan, RAD[i], value); | |
127 | PRINT_IT_1_ARG (asin, RAD[i], value); | |
128 | PRINT_IT_1_ARG (acos, RAD[i], value); | |
129 | PRINT_IT_1_ARG (atan, RAD[i], value); | |
130 | PRINT_IT_2_ARG (atan2, RAD[i], -RAD[i % 4], value); | |
131 | } | |
132 | ||
133 | arg1 = 16; | |
134 | arg2 = 3; | |
135 | PRINT_IT_1_ARG (exp, arg1, value); | |
136 | PRINT_IT_1_ARG (log, arg1, value); | |
137 | PRINT_IT_1_ARG (log10, arg1, value); | |
138 | PRINT_IT_2_ARG (pow, arg1, arg2, value); | |
139 | PRINT_IT_1_ARG (sqrt, arg1, value); | |
140 | PRINT_IT_1_ARG (cbrt, arg1, value); | |
141 | PRINT_IT_2_ARG (hypot, arg1, arg2, value); | |
142 | PRINT_IT_1_ARG (expm1, arg1, value); | |
143 | PRINT_IT_1_ARG (log1p, arg1, value); | |
144 | PRINT_IT_1_ARG (sinh, arg1, value); | |
145 | PRINT_IT_1_ARG (cosh, arg1, value); | |
146 | PRINT_IT_1_ARG (tanh, arg1, value); | |
147 | PRINT_IT_1_ARG (asinh, arg1, value); | |
148 | PRINT_IT_1_ARG (acosh, arg1, value); | |
149 | PRINT_IT_1_ARG (atanh, arg1, value); | |
150 | } |