]> pd.if.org Git - pdclib/blob - internals/_PDCLIB_float.h
dos2unix
[pdclib] / internals / _PDCLIB_float.h
1 /* PDCLib internal floating point logic <_PDCLIB_float.h>
2
3    This file is part of the Public Domain C Library (PDCLib).
4    Permission is granted to use, modify, and / or redistribute at will.
5 */
6
7 #ifndef __PDCLIB_PDCLIB_FLOAT_H
8 #define __PDCLIB_PDCLIB_FLOAT_H __PDCLIB_PDCLIB_FLOAT_H
9
10 /* IEEE 754 single precision */
11 #define _PDCLIB_FP_SINGLE_MIN 1.17549435082228750797e-38
12 #define _PDCLIB_FP_SINGLE_EPSILON 1.19209289550781250000e-7
13 #define _PDCLIB_FP_SINGLE_HAS_DENORM 1
14 #define _PDCLIB_FP_SINGLE_MIN_EXP -125
15 #define _PDCLIB_FP_SINGLE_MANT_DIG 24
16 #define _PDCLIB_FP_SINGLE_RADIX 2
17 #define _PDCLIB_FP_SINGLE_HAS_QUIET_NAN 1
18 #define _PDCLIB_FP_SINGLE_MAX_10_EXP 38
19 #define _PDCLIB_FP_SINGLE_HAS_INFINITY 1
20 #define _PDCLIB_FP_SINGLE_DIG 6
21 #define _PDCLIB_FP_SINGLE_MAX_EXP 128
22 #define _PDCLIB_FP_SINGLE_DENORM_MIN 1.40129846432481707092e-45
23 #define _PDCLIB_FP_SINGLE_MAX 3.40282346638528859812e+38
24 #define _PDCLIB_FP_SINGLE_MIN_10_EXP -37
25
26 /* IEEE 754 double precision */
27 #define _PDCLIB_FP_DOUBLE_MIN_EXP -1021
28 #define _PDCLIB_FP_DOUBLE_DENORM_MIN 4.94065645841246544177e-324
29 #define _PDCLIB_FP_DOUBLE_MIN_10_EXP -307
30 #define _PDCLIB_FP_DOUBLE_DIG 15
31 #define _PDCLIB_FP_DOUBLE_MAX 1.79769313486231570815e+308
32 #define _PDCLIB_FP_DOUBLE_HAS_INFINITY 1
33 #define _PDCLIB_FP_DOUBLE_MAX_EXP 1024
34 #define _PDCLIB_FP_DOUBLE_MIN 2.22507385850720138309e-308
35 #define _PDCLIB_FP_DOUBLE_HAS_DENORM 1
36 #define _PDCLIB_FP_DOUBLE_HAS_QUIET_NAN 1
37 #define _PDCLIB_FP_DOUBLE_MANT_DIG 53
38 #define _PDCLIB_FP_DOUBLE_EPSILON 2.22044604925031308085e-16
39 #define _PDCLIB_FP_DOUBLE_MAX_10_EXP 308
40
41 /* IEEE 754 80-bit extended precision */
42 #define _PDCLIB_FP_EXTENDED_MAX 1.18973149535723176502e+4932
43 #define _PDCLIB_FP_EXTENDED_MAX_EXP 16384
44 #define _PDCLIB_FP_EXTENDED_HAS_INFINITY 1
45 #define _PDCLIB_FP_EXTENDED_MIN 3.36210314311209350626e-4932
46 #define _PDCLIB_FP_EXTENDED_HAS_QUIET_NAN 1
47 #define _PDCLIB_FP_EXTENDED_HAS_DENORM 1
48 #define _PDCLIB_FP_EXTENDED_EPSILON 1.08420217248550443401e-19
49 #define _PDCLIB_FP_EXTENDED_MANT_DIG 64
50 #define _PDCLIB_FP_EXTENDED_MIN_EXP (-16381)
51 #define _PDCLIB_FP_EXTENDED_MAX_10_EXP 4932
52 #define _PDCLIB_FP_EXTENDED_DENORM_MIN 3.64519953188247460253e-4951
53 #define _PDCLIB_FP_EXTENDED_MIN_10_EXP (-4931)
54 #define _PDCLIB_FP_EXTENDED_DIG 18
55
56 /* TODO: IEEE754 quadruple precision (_PDCLIB_FP_QUADRUPLE_*) and
57          "double-double" math
58  */
59
60 #define _PDCLIB_FLT_RADIX       _PDCLIB_concat( _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _RADIX ), f )
61 #define _PDCLIB_FLT_MANT_DIG    _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _MANT_DIG )
62 #define _PDCLIB_FLT_DIG         _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _DIG )
63 #define _PDCLIB_FLT_EPSILON     _PDCLIB_concat( _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _EPSILON ), f )
64 #define _PDCLIB_FLT_MIN_EXP     _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _MIN_EXP )
65 #define _PDCLIB_FLT_MIN         _PDCLIB_concat( _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _MIN ), f )
66 #define _PDCLIB_FLT_MIN_10_EXP  _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _MIN_10_EXP )
67 #define _PDCLIB_FLT_MAX_EXP     _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _MAX_EXP )
68 #define _PDCLIB_FLT_MAX         _PDCLIB_concat( _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _MAX ), f )
69 #define _PDCLIB_FLT_MAX_10_EXP  _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_FLOAT_TYPE, _MAX_10_EXP )
70
71 #define _PDCLIB_DBL_RADIX       _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _RADIX )
72 #define _PDCLIB_DBL_MANT_DIG    _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _MANT_DIG )
73 #define _PDCLIB_DBL_DIG         _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _DIG )
74 #define _PDCLIB_DBL_EPSILON     _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _EPSILON )
75 #define _PDCLIB_DBL_MIN_EXP     _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _MIN_EXP )
76 #define _PDCLIB_DBL_MIN         _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _MIN )
77 #define _PDCLIB_DBL_MIN_10_EXP  _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _MIN_10_EXP )
78 #define _PDCLIB_DBL_MAX_EXP     _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _MAX_EXP )
79 #define _PDCLIB_DBL_MAX         _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _MAX )
80 #define _PDCLIB_DBL_MAX_10_EXP  _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_DOUBLE_TYPE, _MAX_10_EXP )
81
82 #define _PDCLIB_LDBL_RADIX       _PDCLIB_concat( _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _RADIX ), l )
83 #define _PDCLIB_LDBL_MANT_DIG    _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _MANT_DIG )
84 #define _PDCLIB_LDBL_DIG         _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _DIG )
85 #define _PDCLIB_LDBL_EPSILON     _PDCLIB_concat( _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _EPSILON ), l )
86 #define _PDCLIB_LDBL_MIN_EXP     _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _MIN_EXP )
87 #define _PDCLIB_LDBL_MIN         _PDCLIB_concat( _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _MIN ), l )
88 #define _PDCLIB_LDBL_MIN_10_EXP  _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _MIN_10_EXP )
89 #define _PDCLIB_LDBL_MAX_EXP     _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _MAX_EXP )
90 #define _PDCLIB_LDBL_MAX         _PDCLIB_concat( _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _MAX ), l )
91 #define _PDCLIB_LDBL_MAX_10_EXP  _PDCLIB_concat3( _PDCLIB_FP_, _PDCLIB_LDOUBLE_TYPE, _MAX_10_EXP )
92
93 #endif