Library of Assembled Shared Sources
num_traits.cpp
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2021 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43
44
45#include "lass_common.h"
46#include "num_traits.h"
47#include "interval.h"
48#include <climits>
49#include <cfloat>
50
51// http://pi.lacim.uqam.ca/eng/table_en.html
52#define LASS_NUM_PI 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067
53#define LASS_NUM_E 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427
54#define LASS_NUM_SQRT_2 1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572
55#define LASS_NUM_SQRT_PI 1.772453850905516027298167483341145
56
57namespace lass
58{
59namespace num
60{
61
62/***********************************************************************
63* float num trait
64*/
65
66/* got rid of the template<> because VS2003 didn't like it although but we did
67* and at first and second glance the standard also likes it [TDM]
68*/
69template <> struct LASS_DLL NumTraits<float>;
70constexpr size_t NumTraits<float>::memorySize;
71constexpr size_t NumTraits<float>::mantisseSize;
72constexpr float NumTraits<float>::one;
73constexpr float NumTraits<float>::zero;
74constexpr float NumTraits<float>::qNaN;
75constexpr float NumTraits<float>::sNaN;
76constexpr float NumTraits<float>::infinity;
77constexpr float NumTraits<float>::epsilon;
78constexpr float NumTraits<float>::min;
79constexpr float NumTraits<float>::max ;
80constexpr float NumTraits<float>::minStrictPositive;
81constexpr float NumTraits<float>::pi;
82constexpr float NumTraits<float>::e;
83constexpr float NumTraits<float>::sqrt2 ;
84constexpr float NumTraits<float>::sqrtPi;
85
86// complex specialisation
87template <> struct LASS_DLL NumTraits< std::complex<float> >;
88constexpr size_t NumTraits< std::complex<float> >::memorySize;
89constexpr size_t NumTraits< std::complex<float> >::mantisseSize;
90constexpr std::complex<float> NumTraits< std::complex<float> >::one;
91constexpr std::complex<float> NumTraits< std::complex<float> >::zero;
92constexpr std::complex<float> NumTraits< std::complex<float> >::pi;
93constexpr std::complex<float> NumTraits< std::complex<float> >::e;
94constexpr std::complex<float> NumTraits< std::complex<float> >::sqrt2;
95constexpr std::complex<float> NumTraits< std::complex<float> >::sqrtPi;
96
97/***********************************************************************
98* double num trait
99*/
100template <> struct LASS_DLL NumTraits<double>;
101constexpr size_t NumTraits<double>::memorySize;
102constexpr size_t NumTraits<double>::mantisseSize;
103constexpr double NumTraits<double>::one;
104constexpr double NumTraits<double>::zero;
105constexpr double NumTraits<double>::qNaN;
106constexpr double NumTraits<double>::sNaN;
107constexpr double NumTraits<double>::infinity;
108constexpr double NumTraits<double>::epsilon;
109constexpr double NumTraits<double>::min;
110constexpr double NumTraits<double>::max;
111constexpr double NumTraits<double>::minStrictPositive;
112constexpr double NumTraits<double>::pi;
113constexpr double NumTraits<double>::e;
114constexpr double NumTraits<double>::sqrt2;
115constexpr double NumTraits<double>::sqrtPi;
116
117// complex specialisation
118template <> struct LASS_DLL NumTraits< std::complex<double> >;
119constexpr size_t NumTraits< std::complex<double> >::memorySize;
120constexpr size_t NumTraits< std::complex<double> >::mantisseSize;
121constexpr std::complex<double> NumTraits< std::complex<double> >::one;
122constexpr std::complex<double> NumTraits< std::complex<double> >::zero;
123constexpr std::complex<double> NumTraits< std::complex<double> >::pi;
124constexpr std::complex<double> NumTraits< std::complex<double> >::e;
125constexpr std::complex<double> NumTraits< std::complex<double> >::sqrt2;
126constexpr std::complex<double> NumTraits< std::complex<double> >::sqrtPi;
127
128/***********************************************************************
129* long double num trait
130*/
131template <> struct LASS_DLL NumTraits<long double>;
132constexpr size_t NumTraits<long double>::memorySize;
133constexpr size_t NumTraits<long double>::mantisseSize;
134constexpr long double NumTraits<long double>::one;
135constexpr long double NumTraits<long double>::zero;
136constexpr long double NumTraits<long double>::qNaN;
137constexpr long double NumTraits<long double>::sNaN;
138constexpr long double NumTraits<long double>::infinity;
139constexpr long double NumTraits<long double>::epsilon;
140constexpr long double NumTraits<long double>::min;
141constexpr long double NumTraits<long double>::max;
142constexpr long double NumTraits<long double>::minStrictPositive;
143constexpr long double NumTraits<long double>::pi;
144constexpr long double NumTraits<long double>::e;
145constexpr long double NumTraits<long double>::sqrt2;
146constexpr long double NumTraits<long double>::sqrtPi;
147
148// complex specialisation
149template <> struct LASS_DLL NumTraits< std::complex<long double> >;
150constexpr size_t NumTraits< std::complex<long double> >::memorySize;
151constexpr size_t NumTraits< std::complex<long double> >::mantisseSize;
152constexpr std::complex<long double> NumTraits< std::complex<long double> >::one;
153constexpr std::complex<long double> NumTraits< std::complex<long double> >::zero;
154constexpr std::complex<long double> NumTraits< std::complex<long double> >::pi;
155constexpr std::complex<long double> NumTraits< std::complex<long double> >::e;
156constexpr std::complex<long double> NumTraits< std::complex<long double> >::sqrt2;
157constexpr std::complex<long double> NumTraits< std::complex<long double> >::sqrtPi;
158
159
160/***********************************************************************
161* unsigned/signed char/short/int/long num trait
162*/
163
164/** code generating macro for integral types */
165#define LASS_NUM_TRAITS_INTEGRAL_TEMPLATE_SPEC( t_type ) \
166template <> struct LASS_DLL NumTraits<t_type>;\
167constexpr size_t NumTraits<t_type>::memorySize;\
168constexpr size_t NumTraits<t_type>::mantisseSize;\
169constexpr t_type NumTraits<t_type>::one ;\
170constexpr t_type NumTraits<t_type>::zero;\
171constexpr t_type NumTraits<t_type>::epsilon;\
172constexpr t_type NumTraits<t_type>::min;\
173constexpr t_type NumTraits<t_type>::max ;\
174constexpr t_type NumTraits<t_type>::minStrictPositive;
175
185#if LASS_HAVE_LONG_LONG
188#elif LASS_PLATFORM_TYPE == LASS_PLATFORM_TYPE_WIN32
191#endif
192 }
193}
#define LASS_DLL
DLL interface: import or export symbols?
numeric types and traits.
Definition basic_ops.h:70
Library for Assembled Shared Sources.
Definition config.h:53
#define LASS_NUM_TRAITS_INTEGRAL_TEMPLATE_SPEC(t_type)
code generating macro for integral types