Print this page
10882 math headers should stop supporting K&R C
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/head/floatingpoint.h
+++ new/usr/src/head/floatingpoint.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21 /* Copyright (C) 1989 AT&T */
22 22 /* All Rights Reserved */
23 23
24 24 /*
25 25 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
26 26 */
27 27 /*
28 28 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
29 29 * Use is subject to license terms.
30 30 */
31 31
32 32 #ifndef _FLOATINGPOINT_H
33 33 #define _FLOATINGPOINT_H
34 34
35 35 #ifdef __STDC__
36 36 #include <stdio_tag.h>
37 37 #endif
38 38 #include <sys/ieeefp.h>
39 39
40 40 #ifdef __cplusplus
↓ open down ↓ |
40 lines elided |
↑ open up ↑ |
41 41 extern "C" {
42 42 #endif
43 43
44 44 /*
45 45 * <floatingpoint.h> contains definitions for constants, types, variables,
46 46 * and functions for:
47 47 * IEEE floating-point arithmetic base conversion;
48 48 * IEEE floating-point arithmetic modes;
49 49 * IEEE floating-point arithmetic exception handling.
50 50 */
51 -
52 -#ifndef __P
53 -#ifdef __STDC__
54 -#define __P(p) p
55 -#else
56 -#define __P(p) ()
57 -#endif
58 -#endif /* !defined(__P) */
59 -
60 51 #if defined(__STDC__) && !defined(_FILEDEFED)
61 52 #define _FILEDEFED
62 53 typedef __FILE FILE;
63 54 #endif
64 55
65 56 typedef int sigfpe_code_type; /* Type of SIGFPE code. */
66 57
67 58 typedef void (*sigfpe_handler_type)(); /* Pointer to exception handler */
68 59
69 60 #define SIGFPE_DEFAULT (void (*)())0 /* default exception handling */
70 61 #define SIGFPE_IGNORE (void (*)())1 /* ignore this exception or code */
71 62 #define SIGFPE_ABORT (void (*)())2 /* force abort on exception */
72 63
73 -extern sigfpe_handler_type sigfpe __P((sigfpe_code_type, sigfpe_handler_type));
64 +extern sigfpe_handler_type sigfpe(sigfpe_code_type, sigfpe_handler_type);
74 65
75 66 /*
76 67 * Types for IEEE floating point.
77 68 */
78 69 typedef float single;
79 70
80 71 #ifndef _EXTENDED
81 72 #define _EXTENDED
82 73 typedef unsigned extended[3];
83 74 #endif
84 75
85 76 typedef long double quadruple; /* Quadruple-precision type. */
86 77
87 78 typedef unsigned fp_exception_field_type;
88 79 /*
89 80 * A field containing fp_exceptions OR'ed
90 81 * together.
91 82 */
92 83 /*
93 84 * Definitions for base conversion.
94 85 */
95 86 #define DECIMAL_STRING_LENGTH 512 /* Size of buffer in decimal_record. */
96 87
97 88 typedef char decimal_string[DECIMAL_STRING_LENGTH];
98 89 /* Decimal significand. */
99 90
100 91 typedef struct {
101 92 enum fp_class_type fpclass;
102 93 int sign;
103 94 int exponent;
104 95 decimal_string ds; /* Significand - each char contains an ascii */
105 96 /* digit, except the string-terminating */
106 97 /* ascii null. */
107 98 int more; /* On conversion from decimal to binary, != 0 */
108 99 /* indicates more non-zero digits following */
109 100 /* ds. */
110 101 int ndigits; /* On fixed_form conversion from binary to */
111 102 /* decimal, contains number of digits */
112 103 /* required for ds. */
113 104 } decimal_record;
114 105
115 106 enum decimal_form {
116 107 fixed_form, /* Fortran F format: ndigits specifies number */
117 108 /* of digits after point; if negative, */
118 109 /* specifies rounding to occur to left of */
119 110 /* point. */
120 111 floating_form /* Fortran E format: ndigits specifies number */
121 112 /* of significant digits. */
122 113 };
123 114
124 115 typedef struct {
125 116 enum fp_direction_type rd;
126 117 /* Rounding direction. */
127 118 enum decimal_form df; /* Format for conversion from binary to */
128 119 /* decimal. */
129 120 int ndigits; /* Number of digits for conversion. */
130 121 } decimal_mode;
131 122
132 123 enum decimal_string_form { /* Valid decimal number string formats. */
133 124 invalid_form, /* Not a valid decimal string format. */
134 125 whitespace_form, /* All white space - valid in Fortran! */
135 126 fixed_int_form, /* <digs> */
136 127 fixed_intdot_form, /* <digs>. */
137 128 fixed_dotfrac_form, /* .<digs> */
138 129 fixed_intdotfrac_form, /* <digs>.<frac> */
↓ open down ↓ |
55 lines elided |
↑ open up ↑ |
139 130 floating_int_form, /* <digs><exp> */
140 131 floating_intdot_form, /* <digs>.<exp> */
141 132 floating_dotfrac_form, /* .<digs><exp> */
142 133 floating_intdotfrac_form, /* <digs>.<digs><exp> */
143 134 inf_form, /* inf */
144 135 infinity_form, /* infinity */
145 136 nan_form, /* nan */
146 137 nanstring_form /* nan(string) */
147 138 };
148 139
149 -extern void single_to_decimal __P((single *, decimal_mode *, decimal_record *,
150 - fp_exception_field_type *));
151 -extern void double_to_decimal __P((double *, decimal_mode *, decimal_record *,
152 - fp_exception_field_type *));
153 -extern void extended_to_decimal __P((extended *, decimal_mode *,
154 - decimal_record *, fp_exception_field_type *));
155 -extern void quadruple_to_decimal __P((quadruple *, decimal_mode *,
156 - decimal_record *, fp_exception_field_type *));
157 -
158 -extern void decimal_to_single __P((single *, decimal_mode *, decimal_record *,
159 - fp_exception_field_type *));
160 -extern void decimal_to_double __P((double *, decimal_mode *, decimal_record *,
161 - fp_exception_field_type *));
162 -extern void decimal_to_extended __P((extended *, decimal_mode *,
163 - decimal_record *, fp_exception_field_type *));
164 -extern void decimal_to_quadruple __P((quadruple *, decimal_mode *,
165 - decimal_record *, fp_exception_field_type *));
166 -
167 -extern void string_to_decimal __P((char **, int, int, decimal_record *,
168 - enum decimal_string_form *, char **));
169 -extern void func_to_decimal __P((char **, int, int, decimal_record *,
170 - enum decimal_string_form *, char **,
171 - int (*)(void), int *, int (*)(int)));
172 -extern void file_to_decimal __P((char **, int, int, decimal_record *,
173 - enum decimal_string_form *, char **,
174 - FILE *, int *));
175 -
176 -extern char *seconvert __P((single *, int, int *, int *, char *));
177 -extern char *sfconvert __P((single *, int, int *, int *, char *));
178 -extern char *sgconvert __P((single *, int, int, char *));
179 -extern char *econvert __P((double, int, int *, int *, char *));
180 -extern char *fconvert __P((double, int, int *, int *, char *));
181 -extern char *gconvert __P((double, int, int, char *));
182 -extern char *qeconvert __P((quadruple *, int, int *, int *, char *));
183 -extern char *qfconvert __P((quadruple *, int, int *, int *, char *));
184 -extern char *qgconvert __P((quadruple *, int, int, char *));
185 -
186 -extern char *ecvt __P((double, int, int *, int *));
187 -extern char *fcvt __P((double, int, int *, int *));
188 -extern char *gcvt __P((double, int, char *));
140 +extern void single_to_decimal(single *, decimal_mode *, decimal_record *,
141 + fp_exception_field_type *);
142 +extern void double_to_decimal(double *, decimal_mode *, decimal_record *,
143 + fp_exception_field_type *);
144 +extern void extended_to_decimal(extended *, decimal_mode *,
145 + decimal_record *, fp_exception_field_type *);
146 +extern void quadruple_to_decimal(quadruple *, decimal_mode *,
147 + decimal_record *, fp_exception_field_type *);
148 +
149 +extern void decimal_to_single(single *, decimal_mode *, decimal_record *,
150 + fp_exception_field_type *);
151 +extern void decimal_to_double(double *, decimal_mode *, decimal_record *,
152 + fp_exception_field_type *);
153 +extern void decimal_to_extended(extended *, decimal_mode *,
154 + decimal_record *, fp_exception_field_type *);
155 +extern void decimal_to_quadruple(quadruple *, decimal_mode *,
156 + decimal_record *, fp_exception_field_type *);
157 +
158 +extern void string_to_decimal(char **, int, int, decimal_record *,
159 + enum decimal_string_form *, char **);
160 +extern void func_to_decimal(char **, int, int, decimal_record *,
161 + enum decimal_string_form *, char **,
162 + int (*)(void), int *, int (*)(int));
163 +extern void file_to_decimal(char **, int, int, decimal_record *,
164 + enum decimal_string_form *, char **,
165 + FILE *, int *);
166 +
167 +extern char *seconvert(single *, int, int *, int *, char *);
168 +extern char *sfconvert(single *, int, int *, int *, char *);
169 +extern char *sgconvert(single *, int, int, char *);
170 +extern char *econvert(double, int, int *, int *, char *);
171 +extern char *fconvert(double, int, int *, int *, char *);
172 +extern char *gconvert(double, int, int, char *);
173 +extern char *qeconvert(quadruple *, int, int *, int *, char *);
174 +extern char *qfconvert(quadruple *, int, int *, int *, char *);
175 +extern char *qgconvert(quadruple *, int, int, char *);
176 +
177 +extern char *ecvt(double, int, int *, int *);
178 +extern char *fcvt(double, int, int *, int *);
179 +extern char *gcvt(double, int, char *);
189 180
190 181 #if __cplusplus >= 199711L
191 182 namespace std {
192 183 #endif
193 184 /*
194 185 * ANSI C Standard says the following entry points should be
195 186 * prototyped in <stdlib.h>. They are now, but weren't before.
196 187 */
197 -extern double atof __P((const char *));
198 -extern double strtod __P((const char *, char **));
188 +extern double atof(const char *);
189 +extern double strtod(const char *, char **);
199 190 #if __cplusplus >= 199711L
200 191 }
201 192
202 193 using std::atof;
203 194 using std::strtod;
204 195 #endif /* end of namespace std */
205 196
206 197 #ifdef __cplusplus
207 198 }
208 199 #endif
209 200
210 201 #endif /* _FLOATINGPOINT_H */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX