Index: src/libcfa/limits
===================================================================
--- src/libcfa/limits	(revision 094476de228cd8cb7d6a34066aacd6b8adb12617)
+++ src/libcfa/limits	(revision caa649b9dc5ac77e3114ebf86f767d903959d155)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 18:06:52 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul  7 09:33:57 2017
-// Update Count     : 7
+// Last Modified On : Thu Mar  1 16:20:54 2018
+// Update Count     : 13
 //
 
@@ -18,9 +18,17 @@
 // Integral Constants
 
+extern const signed char MIN;
+extern const unsigned char MIN;
 extern const short int MIN;
+extern const unsigned short int MIN;
 extern const int MIN;
+extern const unsigned int MIN;
 extern const long int MIN;
+extern const unsigned long int MIN;
 extern const long long int MIN;
+extern const unsigned long long int MIN;
 
+extern const signed char MAX;
+extern const unsigned char MAX;
 extern const short int MAX;
 extern const unsigned short int MAX;
@@ -33,4 +41,18 @@
 
 // Floating-Point Constants
+
+extern const float MIN;
+extern const double MIN;
+extern const long double MIN;
+extern const float _Complex MIN;
+extern const double _Complex MIN;
+extern const long double _Complex MIN;
+
+extern const float MAX;
+extern const double MAX;
+extern const long double MAX;
+extern const float _Complex MAX;
+extern const double _Complex MAX;
+extern const long double _Complex MAX;
 
 extern const float PI;									// pi
@@ -55,17 +77,24 @@
 extern const long double _2_SQRT_PI;					// 2 / sqrt(pi)
 
-extern const _Complex PI;								// pi
-extern const _Complex PI_2;								// pi / 2
-extern const _Complex PI_4;								// pi / 4
-extern const _Complex _1_PI;							// 1 / pi
-extern const _Complex _2_PI;							// 2 / pi
-extern const _Complex _2_SQRT_PI;						// 2 / sqrt(pi)
+extern const float _Complex PI;							// pi
+extern const float _Complex PI_2;						// pi / 2
+extern const float _Complex PI_4;						// pi / 4
+extern const float _Complex _1_PI;						// 1 / pi
+extern const float _Complex _2_PI;						// 2 / pi
+extern const float _Complex _2_SQRT_PI;					// 2 / sqrt(pi)
 
-extern const long _Complex PI;							// pi
-extern const long _Complex PI_2;						// pi / 2
-extern const long _Complex PI_4;						// pi / 4
-extern const long _Complex _1_PI;						// 1 / pi
-extern const long _Complex _2_PI;						// 2 / pi
-extern const long _Complex _2_SQRT_PI;					// 2 / sqrt(pi)
+extern const double _Complex PI;						// pi
+extern const double _Complex PI_2;						// pi / 2
+extern const double _Complex PI_4;						// pi / 4
+extern const double _Complex _1_PI;						// 1 / pi
+extern const double _Complex _2_PI;						// 2 / pi
+extern const double _Complex _2_SQRT_PI;				// 2 / sqrt(pi)
+
+extern const long double _Complex PI;					// pi
+extern const long double _Complex PI_2;					// pi / 2
+extern const long double _Complex PI_4;					// pi / 4
+extern const long double _Complex _1_PI;				// 1 / pi
+extern const long double _Complex _2_PI;				// 2 / pi
+extern const long double _Complex _2_SQRT_PI;			// 2 / sqrt(pi)
 
 extern const float E;									// e
@@ -93,19 +122,27 @@
 extern const long double _1_SQRT_2;						// 1/sqrt(2)
 
-extern const _Complex E;								// e
-extern const _Complex LOG2_E;							// log_2(e)
-extern const _Complex LOG10_E;							// log_10(e)
-extern const _Complex LN_2;								// log_e(2)
-extern const _Complex LN_10;							// log_e(10)
-extern const _Complex SQRT_2;							// sqrt(2)
-extern const _Complex _1_SQRT_2;						// 1 / sqrt(2)
+extern const float _Complex E;							// e
+extern const float _Complex LOG2_E;						// log_2(e)
+extern const float _Complex LOG10_E;					// log_10(e)
+extern const float _Complex LN_2;						// log_e(2)
+extern const float _Complex LN_10;						// log_e(10)
+extern const float _Complex SQRT_2;						// sqrt(2)
+extern const float _Complex _1_SQRT_2;					// 1 / sqrt(2)
 
-extern const long _Complex E;							// e
-extern const long _Complex LOG2_E;						// log_2(e)
-extern const long _Complex LOG10_E;						// log_10(e)
-extern const long _Complex LN_2;						// log_e(2)
-extern const long _Complex LN_10;						// log_e(10)
-extern const long _Complex SQRT_2;						// sqrt(2)
-extern const long _Complex _1_SQRT_2;					// 1 / sqrt(2)
+extern const double _Complex E;							// e
+extern const double _Complex LOG2_E;					// log_2(e)
+extern const double _Complex LOG10_E;					// log_10(e)
+extern const double _Complex LN_2;						// log_e(2)
+extern const double _Complex LN_10;						// log_e(10)
+extern const double _Complex SQRT_2;					// sqrt(2)
+extern const double _Complex _1_SQRT_2;					// 1 / sqrt(2)
+
+extern const long double _Complex E;					// e
+extern const long double _Complex LOG2_E;				// log_2(e)
+extern const long double _Complex LOG10_E;				// log_10(e)
+extern const long double _Complex LN_2;					// log_e(2)
+extern const long double _Complex LN_10;				// log_e(10)
+extern const long double _Complex SQRT_2;				// sqrt(2)
+extern const long double _Complex _1_SQRT_2;			// 1 / sqrt(2)
 
 // Local Variables: //
Index: src/libcfa/limits.c
===================================================================
--- src/libcfa/limits.c	(revision 094476de228cd8cb7d6a34066aacd6b8adb12617)
+++ src/libcfa/limits.c	(revision caa649b9dc5ac77e3114ebf86f767d903959d155)
@@ -10,110 +10,144 @@
 // Created On       : Wed Apr  6 18:06:52 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 12 10:34:48 2016
-// Update Count     : 17
+// Last Modified On : Thu Mar  1 16:22:51 2018
+// Update Count     : 74
 // 
 
+#include <limits.h>
+#include <float.h>
+#define __USE_GNU										// get M_* constants
+#include <math.h>
+#include <complex.h>
 #include "limits"
 
 // Integral Constants
 
-const short int MIN = -32768;
-const int MIN = -2147483648;
-#if __WORDSIZE == 64
-const long int MIN = -9223372036854775807L - 1L;
-#else
-const long int MIN = (int)MIN;
-#endif // M64
-const long long int MIN = -9223372036854775807LL - 1LL;
+const signed char MIN = SCHAR_MIN;
+const unsigned char MIN = 0;
+const short int MIN = SHRT_MIN;
+const unsigned short int MIN = 0;
+const int MIN = INT_MIN;
+const unsigned int MIN = 0;
+const long int MIN = LONG_MIN;
+const unsigned long int MIN = 0;
+const long long int MIN = LLONG_MIN;
+const unsigned long long int MIN = 0;
 
-const short int MAX = 32767;
-const unsigned short int MAX = 65535;
-const int MAX = 2147483647;
-const unsigned int MAX = 4294967295_U;
-#if __WORDSIZE == 64
-const long int MAX = 9223372036854775807_L;
-#else
-const long int MAX = (int)MAX;
-#endif // M64
-const unsigned long int MAX = 4294967295_U;
-const long long int MAX = 9223372036854775807_LL;
-const unsigned long long int MAX = 18446744073709551615_ULL;
+const signed char MAX = SCHAR_MAX;
+const unsigned char MAX = UCHAR_MAX;
+const short int MAX = SHRT_MAX;
+const unsigned short int MAX = USHRT_MAX;
+const int MAX = INT_MAX;
+const unsigned int MAX = UINT_MAX;
+const long int MAX = LONG_MAX;
+const unsigned long int MAX = ULONG_MAX;
+const long long int MAX = LLONG_MAX;
+const unsigned long long int MAX = ULLONG_MAX;
 
 // Floating-Point Constants
 
-const float PI = 3.141592_F;							// pi
-const float PI_2 = 1.570796_F;							// pi / 2
-const float PI_4 = 0.7853981_F;							// pi / 4
-const float _1_PI = 0.3183098_F;						// 1 / pi
-const float _2_PI = 0.6366197_F;						// 2 / pi
-const float _2_SQRT_PI = 1.128379_F;					// 2 / sqrt(pi)
+const float MIN = FLT_MIN;
+const double MIN = DBL_MIN;
+const long double MIN = LDBL_MIN;
+const float _Complex MIN = __FLT_MIN__ + __FLT_MIN__ * I;
+const double _Complex MIN = DBL_MIN +  DBL_MIN * I;
+const long double _Complex MIN = LDBL_MIN + LDBL_MIN * I;
 
-const double PI = 3.14159265358979323846_D;				// pi
-const double PI_2 = 1.57079632679489661923_D;			// pi / 2
-const double PI_4 = 0.78539816339744830962_D;			// pi / 4
-const double _1_PI = 0.31830988618379067154_D;			// 1 / pi
-const double _2_PI = 0.63661977236758134308_D;			// 2 / pi
-const double _2_SQRT_PI = 1.12837916709551257390_D;		// 2 / sqrt(pi)
+const float MAX = FLT_MAX;
+const double MAX = DBL_MAX;
+const long double MAX = LDBL_MAX;
+const float _Complex MAX = FLT_MAX + FLT_MAX * I;
+const double _Complex MAX = DBL_MAX + DBL_MAX * I;
+const long double _Complex MAX = LDBL_MAX + LDBL_MAX * I;
 
-const long double PI = 3.1415926535897932384626433832795029_DL; // pi
-const long double PI_2 = 1.5707963267948966192313216916397514_DL; // pi / 2
-const long double PI_4 = 0.7853981633974483096156608458198757_DL; // pi / 4
-const long double _1_PI = 0.3183098861837906715377675267450287_DL; // 1 / pi
-const long double _2_PI = 0.6366197723675813430755350534900574_DL; // 2 / pi
-const long double _2_SQRT_PI = 1.1283791670955125738961589031215452_DL; // 2 / sqrt(pi)
+const float PI = (float)M_PI;							// pi
+const float PI_2 = (float)M_PI_2;						// pi / 2
+const float PI_4 = (float)M_PI_4;						// pi / 4
+const float _1_PI = (float)M_1_PI;						// 1 / pi
+const float _2_PI = (float)M_2_PI;						// 2 / pi
+const float _2_SQRT_PI = (float)M_2_SQRTPI;				// 2 / sqrt(pi)
 
-const double _Complex PI = 3.14159265358979323846_D+0.0_iD;	// pi
-const double _Complex PI_2 = 1.57079632679489661923_D+0.0_iD; // pi / 2
-const double _Complex PI_4 = 0.78539816339744830962_D+0.0_iD; // pi / 4
-const double _Complex _1_PI = 0.31830988618379067154_D+0.0_iD; // 1 / pi
-const double _Complex _2_PI = 0.63661977236758134308_D+0.0_iD; // 2 / pi
-const double _Complex _2_SQRT_PI = 1.12837916709551257390_D+0.0_iD; // 2 / sqrt(pi)
+const double PI = M_PI;									// pi
+const double PI_2 = M_PI_2;								// pi / 2
+const double PI_4 = M_PI_4;								// pi / 4
+const double _1_PI = M_1_PI;							// 1 / pi
+const double _2_PI = M_2_PI;							// 2 / pi
+const double _2_SQRT_PI = M_2_SQRTPI;					// 2 / sqrt(pi)
 
-const long double _Complex PI = 3.1415926535897932384626433832795029_L+0.0iL; // pi
-const long double _Complex PI_2 = 1.5707963267948966192313216916397514_L+0.0iL; // pi / 2
-const long double _Complex PI_4 = 0.7853981633974483096156608458198757_L+0.0iL; // pi / 4
-const long double _Complex _1_PI = 0.3183098861837906715377675267450287_L+0.0iL; // 1 / pi
-const long double _Complex _2_PI = 0.6366197723675813430755350534900574_L+0.0iL; // 2 / pi
-const long double _Complex _2_SQRT_PI = 1.1283791670955125738961589031215452_L+0.0iL; // 2 / sqrt(pi)
+const long double PI = M_PIl;							// pi
+const long double PI_2 = M_PI_2l;						// pi / 2
+const long double PI_4 = M_PI_4l;						// pi / 4
+const long double _1_PI = M_1_PIl;						// 1 / pi
+const long double _2_PI = M_2_PIl;						// 2 / pi
+const long double _2_SQRT_PI = M_2_SQRTPIl;				// 2 / sqrt(pi)
 
-const float E = 2.718281;								// e
-const float LOG2_E = 1.442695;							// log_2(e)
-const float LOG10_E = 0.4342944;						// log_10(e)
-const float LN_2 = 0.6931471;							// log_e(2)
-const float LN_10 = 2.302585;							// log_e(10)
-const float SQRT_2 = 1.414213;							// sqrt(2)
-const float _1_SQRT_2 = 0.7071067;						// 1 / sqrt(2)
+const float _Complex PI = (float)M_PI + 0.0_iF;			// pi
+const float _Complex PI_2 = (float)M_PI_2 + 0.0_iF;		// pi / 2
+const float _Complex PI_4 = (float)M_PI_4 + 0.0_iF;		// pi / 4
+const float _Complex _1_PI = (float)M_1_PI + 0.0_iF;	// 1 / pi
+const float _Complex _2_PI = (float)M_2_PI + 0.0_iF;	// 2 / pi
+const float _Complex _2_SQRT_PI = (float)M_2_SQRTPI + 0.0_iF; // 2 / sqrt(pi)
 
-const double E = 2.7182818284590452354_D;				// e
-const double LOG2_E = 1.4426950408889634074_D;			// log_2(e)
-const double LOG10_E = 0.43429448190325182765_D;		// log_10(e)
-const double LN_2 = 0.69314718055994530942_D;			// log_e(2)
-const double LN_10 = 2.30258509299404568402_D;			// log_e(10)
-const double SQRT_2 = 1.41421356237309504880_D;			// sqrt(2)
-const double _1_SQRT_2 = 0.70710678118654752440_D;		// 1 / sqrt(2)
+const double _Complex PI = M_PI + 0.0_iD;				// pi
+const double _Complex PI_2 = M_PI_2 + 0.0_iD;			// pi / 2
+const double _Complex PI_4 = M_PI_4 + 0.0_iD;			// pi / 4
+const double _Complex _1_PI = M_1_PI + 0.0_iD;			// 1 / pi
+const double _Complex _2_PI = M_2_PI + 0.0_iD;			// 2 / pi
+const double _Complex _2_SQRT_PI = M_2_SQRTPI + 0.0_iD;	// 2 / sqrt(pi)
 
-const long double E = 2.7182818284590452353602874713526625_DL; // e
-const long double LOG2_E = 1.4426950408889634073599246810018921_DL; // log_2(e)
-const long double LOG10_E = 0.4342944819032518276511289189166051_DL; // log_10(e)
-const long double LN_2 = 0.6931471805599453094172321214581766_DL; // log_e(2)
-const long double LN_10 = 2.3025850929940456840179914546843642_DL; // log_e(10)
-const long double SQRT_2 = 1.4142135623730950488016887242096981_DL; // sqrt(2)
-const long double _1_SQRT_2 = 0.7071067811865475244008443621048490_DL; // 1/sqrt(2)
+const long double _Complex PI = M_PIl + 0.0_iL;			// pi
+const long double _Complex PI_2 = M_PI_2l + 0.0_iL;		// pi / 2
+const long double _Complex PI_4 = M_PI_4l + 0.0_iL;		// pi / 4
+const long double _Complex _1_PI = M_1_PIl + 0.0_iL;	// 1 / pi
+const long double _Complex _2_PI = M_2_PIl + 0.0_iL;	// 2 / pi
+const long double _Complex _2_SQRT_PI = M_2_SQRTPIl + 0.0_iL; // 2 / sqrt(pi)
 
-const double _Complex E = 2.7182818284590452354_D+0.0_iD; // e
-const double _Complex LOG2_E = 1.4426950408889634074_D+0.0_iD; // log_2(e)
-const double _Complex LOG10_E = 0.43429448190325182765_D+0.0_iD; // log_10(e)
-const double _Complex LN_2 = 0.69314718055994530942_D+0.0_iD; // log_e(2)
-const double _Complex LN_10 = 2.30258509299404568402_D+0.0_iD; // log_e(10)
-const double _Complex SQRT_2 = 1.41421356237309504880_D+0.0_iD; // sqrt(2)
-const double _Complex _1_SQRT_2 = 0.70710678118654752440_D+0.0_iD; // 1 / sqrt(2)
+const float E = (float)M_E;								// e
+const float LOG2_E = (float)M_LOG2E;					// log_2(e)
+const float LOG10_E = (float)M_LOG10E;					// log_10(e)
+const float LN_2 = (float)M_LN2;						// log_e(2)
+const float LN_10 = (float)M_LN10;						// log_e(10)
+const float SQRT_2 = (float)M_SQRT2;					// sqrt(2)
+const float _1_SQRT_2 = (float)M_SQRT1_2;				// 1 / sqrt(2)
 
-const long double _Complex E = 2.7182818284590452353602874713526625_L+0.0_iL; // e
-const long double _Complex LOG2_E = 1.4426950408889634073599246810018921_L+0.0_iL; // log_2(e)
-const long double _Complex LOG10_E = 0.4342944819032518276511289189166051_L+0.0_iL; // log_10(e)
-const long double _Complex LN_2 = 0.6931471805599453094172321214581766_L+0.0_iL; // log_e(2)
-const long double _Complex LN_10 = 2.3025850929940456840179914546843642_L+0.0_iL; // log_e(10)
-const long double _Complex SQRT_2 = 1.4142135623730950488016887242096981_L+0.0_iL; // sqrt(2)
-const long double _Complex _1_SQRT_2 = 0.7071067811865475244008443621048490_L+0.0_iL; // 1 / sqrt(2)
+const double E = M_E;									// e
+const double LOG2_E = M_LOG2E;							// log_2(e)
+const double LOG10_E = M_LOG10E;						// log_10(e)
+const double LN_2 = M_LN2;								// log_e(2)
+const double LN_10 = M_LN10;							// log_e(10)
+const double SQRT_2 = M_SQRT2;							// sqrt(2)
+const double _1_SQRT_2 = M_SQRT1_2;						// 1 / sqrt(2)
+
+const long double E = M_El;								// e
+const long double LOG2_E = M_LOG2El;					// log_2(e)
+const long double LOG10_E = M_LOG10El;					// log_10(e)
+const long double LN_2 = M_LN2l;						// log_e(2)
+const long double LN_10 = M_LN10l;						// log_e(10)
+const long double SQRT_2 = M_SQRT2l;					// sqrt(2)
+const long double _1_SQRT_2 = M_SQRT1_2l;				// 1 / sqrt(2)
+
+const float _Complex E = M_E + 0.0_iF;					// e
+const float _Complex LOG2_E = M_LOG2E + 0.0_iF;			// log_2(e)
+const float _Complex LOG10_E = M_LOG10E + 0.0_iF;		// log_10(e)
+const float _Complex LN_2 = M_LN2 + 0.0_iF;				// log_e(2)
+const float _Complex LN_10 = M_LN10 + 0.0_iF;			// log_e(10)
+const float _Complex SQRT_2 = M_SQRT2 + 0.0_iF;			// sqrt(2)
+const float _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iF;	// 1 / sqrt(2)
+
+const double _Complex E = M_E + 0.0_iD;					// e
+const double _Complex LOG2_E = M_LOG2E + 0.0_iD;		// log_2(e)
+const double _Complex LOG10_E = M_LOG10E + 0.0_iD;		// log_10(e)
+const double _Complex LN_2 = M_LN2 + 0.0_iD;			// log_e(2)
+const double _Complex LN_10 = M_LN10 + 0.0_iD;			// log_e(10)
+const double _Complex SQRT_2 = M_SQRT2 + 0.0_iD;		// sqrt(2)
+const double _Complex _1_SQRT_2 = M_SQRT1_2 + 0.0_iD;	// 1 / sqrt(2)
+
+const long double _Complex E = M_El + 0.0_iL;			// e
+const long double _Complex LOG2_E = M_LOG2El + 0.0_iL;	// log_2(e)
+const long double _Complex LOG10_E = M_LOG10El + 0.0_iL; // log_10(e)
+const long double _Complex LN_2 = M_LN2l + 0.0_iL;		// log_e(2)
+const long double _Complex LN_10 = M_LN10l + 0.0_iL;	// log_e(10)
+const long double _Complex SQRT_2 = M_SQRT2l + 0.0_iL;	// sqrt(2)
+const long double _Complex _1_SQRT_2 = M_SQRT1_2l + 0.0_iL; // 1 / sqrt(2)
 
 // Local Variables: //
