Index: doc/bibliography/pl.bib
===================================================================
--- doc/bibliography/pl.bib	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ doc/bibliography/pl.bib	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -1797,14 +1797,16 @@
 }
 
-@article{Delisle20,
+@article{Delisle21,
     keywords	= {concurrency, Cforall},
     contributer	= {pabuhr@plg},
     author	= {Thierry Delisle and Peter A. Buhr},
     title	= {Advanced Control-flow and Concurrency in \textsf{C}$\mathbf{\forall}$},
-    year	= 2020,
     journal	= spe,
-    pages	= {1-38},
-    note	= {\href{https://doi-org.proxy.lib.uwaterloo.ca/10.1002/spe.2925}{https://\-doi-org.proxy.lib.uwaterloo.ca/\-10.1002/\-spe.2925}},
-    note	= {},
+    month	= may,
+    year	= 2021,
+    volume	= 51,
+    number	= 5,
+    pages	= {1005-1042},
+    note	= {\href{https://onlinelibrary.wiley.com/doi/10.1002/spe.2925}{https://\-onlinelibrary.wiley.com/\-doi/\-10.1002/\-spe.2925}},
 }
 
Index: libcfa/prelude/builtins.c
===================================================================
--- libcfa/prelude/builtins.c	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ libcfa/prelude/builtins.c	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -9,7 +9,7 @@
 // Author           : Peter A. Buhr
 // Created On       : Fri Jul 21 16:21:03 2017
-// Last Modified By : Andrew Beach
-// Last Modified On : Tue Oct 27 14:42:00 2020
-// Update Count     : 111
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Apr 13 17:26:32 2021
+// Update Count     : 117
 //
 
@@ -125,6 +125,6 @@
 } // distribution
 
-#define __CFA_BASE_COMP_1__() if ( ep == 1 ) return 1
-#define __CFA_BASE_COMP_2__() if ( ep == 2 ) return ep << (y - 1)
+#define __CFA_BASE_COMP_1__() if ( x == 1 ) return 1
+#define __CFA_BASE_COMP_2__() if ( x == 2 ) return x << (y - 1)
 #define __CFA_EXP_OVERFLOW__() if ( y >= sizeof(y) * CHAR_BIT ) return 0
 
@@ -134,17 +134,19 @@
 	__CFA_BASE_COMP_2__();								/* special case, positive shifting for integral types */ \
 	__CFA_EXP_OVERFLOW__();								/* immediate overflow, negative exponent > 2^size-1 */ \
-	typeof(ep) op = 1;									/* accumulate odd product */ \
+	typeof(x) op = 1;									/* accumulate odd product */ \
 	for ( ; y > 1; y >>= 1 ) {							/* squaring exponentiation, O(log2 y) */ \
-		if ( (y & 1) == 1 ) op = op * ep;				/* odd ? */ \
-		ep = ep * ep; \
+		if ( (y & 1) == 1 ) op = op * x;				/* odd ? */ \
+		x = x * x; \
 	} \
-	return ep * op
+	return x * op
 
 static inline {
-	long int ?\?( int ep, unsigned int y ) { __CFA_EXP__(); }
-	long int ?\?( long int ep, unsigned long int y ) { __CFA_EXP__(); }
+	long int ?\?( int x, unsigned int y ) { __CFA_EXP__(); }
+	long int ?\?( long int x, unsigned long int y ) { __CFA_EXP__(); }
+	long long int ?\?( long long int x, unsigned long long int y ) { __CFA_EXP__(); }
 	// unsigned computation may be faster and larger
-	unsigned long int ?\?( unsigned int ep, unsigned int y ) { __CFA_EXP__(); }
-	unsigned long int ?\?( unsigned long int ep, unsigned long int y ) { __CFA_EXP__(); }
+	unsigned long int ?\?( unsigned int x, unsigned int y ) { __CFA_EXP__(); }
+	unsigned long int ?\?( unsigned long int x, unsigned long int y ) { __CFA_EXP__(); }
+	unsigned long long int ?\?( unsigned long long int x, unsigned long long int y ) { __CFA_EXP__(); }
 } // distribution
 
@@ -157,6 +159,7 @@
 
 static inline forall( OT | { void ?{}( OT & this, one_t ); OT ?*?( OT, OT ); } ) {
-	OT ?\?( OT ep, unsigned int y ) { __CFA_EXP__(); }
-	OT ?\?( OT ep, unsigned long int y ) { __CFA_EXP__(); }
+	OT ?\?( OT x, unsigned int y ) { __CFA_EXP__(); }
+	OT ?\?( OT x, unsigned long int y ) { __CFA_EXP__(); }
+	OT ?\?( OT x, unsigned long long int y ) { __CFA_EXP__(); }
 } // distribution
 
@@ -166,8 +169,10 @@
 
 static inline {
+	long int ?\=?( int & x, unsigned int y ) { x = x \ y; return x; }
 	long int ?\=?( long int & x, unsigned long int y ) { x = x \ y; return x; }
+	long long int ?\=?( long long int & x, unsigned long long int y ) { x = x \ y; return x; }
+	unsigned long int ?\=?( unsigned int & x, unsigned int y ) { x = x \ y; return x; }
 	unsigned long int ?\=?( unsigned long int & x, unsigned long int y ) { x = x \ y; return x; }
-	int ?\=?( int & x, unsigned long int y ) { x = x \ y; return x; }
-	unsigned int ?\=?( unsigned int & x, unsigned long int y ) { x = x \ y; return x; }
+	unsigned long long int ?\=?( unsigned long long int & x, unsigned long long int y ) { x = x \ y; return x; }
 } // distribution
 
Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ libcfa/src/iostream.cfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar  2 14:51:30 2021
-// Update Count     : 1151
+// Last Modified On : Tue Apr 13 13:05:24 2021
+// Update Count     : 1324
 //
 
@@ -195,8 +195,8 @@
 			int len = snprintf( buf, size, format, ##__VA_ARGS__, val ); \
 			fmt( os, "%s", buf ); \
-			if ( isfinite( val ) ) {					/* if number, always print decimal point */ \
+			if ( isfinite( val ) ) { /* if number, print decimal point when no fraction or exponent */ \
 				for ( int i = 0;; i += 1 ) { \
 					if ( i == len ) { fmt( os, "." ); break; } \
-					if ( buf[i] == '.' ) break; \
+					if ( buf[i] == '.' || buf[i] == 'e' || buf[i] == 'E' ) break; /* decimal point or scientific ? */ \
 				} /* for */ \
 			} /* if */ \
@@ -525,136 +525,16 @@
 } // distribution
 
-IntegralFMTImpl( signed char, "%    *hh ", "%    *.*hh " )
-IntegralFMTImpl( unsigned char, "%    *hh ", "%    *.*hh " )
-IntegralFMTImpl( signed short int, "%    *h ", "%    *.*h " )
-IntegralFMTImpl( unsigned short int, "%    *h ", "%    *.*h " )
-IntegralFMTImpl( signed int, "%    * ", "%    *.* " )
-IntegralFMTImpl( unsigned int, "%    * ", "%    *.* " )
-IntegralFMTImpl( signed long int, "%    *l ", "%    *.*l " )
-IntegralFMTImpl( unsigned long int, "%    *l ", "%    *.*l " )
-IntegralFMTImpl( signed long long int, "%    *ll ", "%    *.*ll " )
-IntegralFMTImpl( unsigned long long int, "%    *ll ", "%    *.*ll " )
-
-#if 0
-#if defined( __SIZEOF_INT128__ )
-// Default prefix for non-decimal prints is 0b, 0, 0x.
-#define IntegralFMTImpl128( T, SIGNED, CODE, IFMTNP, IFMTP ) \
-forall( ostype & | ostream( ostype ) ) \
-static void base10_128( ostype & os, _Ostream_Manip(T) f ) { \
-	if ( f.val > UINT64_MAX ) { \
-		unsigned long long int lsig = f.val % P10_UINT64; \
-		f.val /= P10_UINT64; /* msig */ \
-		base10_128( os, f ); /* recursion */ \
-		_Ostream_Manip(unsigned long long int) fmt @= { lsig, 0, 19, 'u', { .all : 0 } }; \
-		fmt.flags.nobsdp = true; \
-		/* printf( "fmt1 %c %lld %d\n", fmt.base, fmt.val, fmt.all ); */ \
-		sepOff( os ); \
-		(ostype &)(os | fmt); \
-	} else { \
-		/* printf( "fmt2 %c %lld %d\n", f.base, (unsigned long long int)f.val, f.all ); */ \
-		_Ostream_Manip(SIGNED long long int) fmt @= { (SIGNED long long int)f.val, f.wd, f.pc, f.base, { .all : f.all } }; \
-		(ostype &)(os | fmt); \
-	} /* if */ \
-} /* base10_128 */ \
-forall( ostype & | ostream( ostype ) ) { \
-	ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \
-		if ( $sepPrt( os ) ) fmt( os, "%s", $sepGetCur( os ) ); \
-\
-		if ( f.base == 'b' | f.base == 'B' | f.base == 'o' | f.base == 'x' | f.base == 'X' ) { \
-			unsigned long long int msig = (unsigned long long int)(f.val >> 64); \
-			unsigned long long int lsig = (unsigned long long int)(f.val); \
-			_Ostream_Manip(SIGNED long long int) fmt @= { msig, f.wd, f.pc, f.base, { .all : f.all } }; \
-			_Ostream_Manip(unsigned long long int) fmt2 @= { lsig, 0, 0, f.base, { .all : 0 } }; \
-			if ( msig == 0 ) { \
-				fmt.val = lsig; \
-				(ostype &)(os | fmt); \
-			} else { \
-				fmt2.flags.pad0 = fmt2.flags.nobsdp = true;	\
-				if ( f.base == 'b' | f.base == 'B' ) { \
-					if ( fmt.flags.pc && fmt.pc > 64 ) fmt.pc -= 64; else { fmt.flags.pc = false; fmt.pc = 0; } \
-					if ( fmt.flags.left ) { \
-						fmt.flags.left = false; \
-						fmt.wd = 0; \
-						/* printf( "L %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
-						fmt2.flags.left = true;	\
-						int msigd = high1( msig ); \
-						fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd); \
-						if ( ! fmt.flags.nobsdp ) fmt2.wd -= 2; /* compensate for 0b base specifier */ \
-						if ( (int)fmt2.wd < 64 ) fmt2.wd = 64; /* cast deals with negative value */ \
-						fmt2.flags.pc = true; fmt2.pc = 64; \
-					} else { \
-						if ( fmt.wd > 64 ) fmt.wd -= 64; \
-						else fmt.wd = 1; \
-						/* printf( "R %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
-						fmt2.wd = 64; \
-					} /* if */ \
-					/* printf( "C %llo %d %d '%c' %x\n", fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
-					(ostype &)(os | fmt | "" | fmt2); \
-				} else if ( f.base == 'o' ) { \
-					if ( fmt.flags.pc && fmt.pc > 22 ) fmt.pc -= 22; else { fmt.flags.pc = false; fmt.pc = 0; } \
-					fmt.val = (unsigned long long int)fmt.val >> 2; \
-					fmt2.val = ((msig & 0x3) << 1) + ((lsig & 0x8000000000000000U) != 0); \
-					if ( fmt.flags.left ) { \
-						fmt.flags.left = false; \
-						fmt.wd = 0; \
-						/* printf( "L %llo %llo %llo %d %d '%c' %x %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all, fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
-						(ostype &)(os | fmt | "" | fmt2); \
-						sepOff( os ); \
-						fmt2.flags.left = true;	\
-						int msigd = ceiling_div( high1( fmt.val ), 3 ); \
-						fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd); \
-						if ( ! fmt.flags.nobsdp ) fmt2.wd -= 1; /* compensate for 0 base specifier */ \
-						if ( (int)fmt2.wd < 21 ) fmt2.wd = 21; /* cast deals with negative value */ \
-						fmt2.flags.pc = true; fmt2.pc = 21; \
-					} else { \
-						if ( fmt.wd > 22 ) fmt.wd -= 22; \
-						else fmt.wd = 1; \
-						/* printf( "R %llo %llo %llo %d %d '%c' %x %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all, fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
-						(ostype &)(os | fmt | "" | fmt2); \
-						sepOff( os ); \
-						fmt2.wd = 21; \
-					} /* if */ \
-					fmt2.val = lsig & 0x7fffffffffffffffU; \
-					/* printf( "\nC %llo %d %d '%c' %x\n", fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
-					(ostype &)(os | fmt2); \
-				} else { /* f.base == 'x'  | f.base == 'X' */ \
-					if ( fmt.flags.pc && fmt.pc > 16 ) fmt.pc -= 16; else { fmt.flags.pc = false; fmt.pc = 0; } \
-					if ( fmt.flags.left ) { \
-						fmt.flags.left = false; \
-						fmt.wd = 0; \
-						/* printf( "L %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
-						fmt2.flags.left = true;	\
-						int msigd = high1( msig ); \
-						fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd); \
-						if ( ! fmt.flags.nobsdp ) fmt2.wd -= 2; /* compensate for 0x base specifier */ \
-						if ( (int)fmt2.wd < 16 ) fmt2.wd = 16; /* cast deals with negative value */ \
-						fmt2.flags.pc = true; fmt2.pc = 16; \
-					} else { \
-						if ( fmt.wd > 16 ) fmt.wd -= 16; \
-						else fmt.wd = 1; \
-						/* printf( "R %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
-						fmt2.wd = 16; \
-					} /* if */ \
-					/* printf( "C %llo %d %d '%c' %x\n", fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
-					(ostype &)(os | fmt | "" | fmt2); \
-				} /* if */ \
-			} /* if */ \
-		} else { \
-			if ( CODE == 'd' ) { \
-				if ( f.val < 0 )  { fmt( os, "-" ); sepOff( os ); f.val = -f.val; f.flags.sign = false; } \
-			} /* if */ \
-			base10_128( os, f ); \
-		} /* if */ \
-		return os; \
-	} /* ?|? */ \
-	void ?|?( ostype & os, _Ostream_Manip(T) f ) { (ostype &)(os | f); ends( os ); } \
-} // distribution
-
-IntegralFMTImpl128( int128, signed, 'd', "%    *ll ", "%    *.*ll " )
-IntegralFMTImpl128( unsigned int128, unsigned, 'u', "%    *ll ", "%    *.*ll " )
-#endif // __SIZEOF_INT128__
-#endif // 0
-
-#if 1
+IntegralFMTImpl( signed char, "     *hh ", "     *.*hh " )
+IntegralFMTImpl( unsigned char, "     *hh ", "     *.*hh " )
+IntegralFMTImpl( signed short int, "     *h ", "     *.*h " )
+IntegralFMTImpl( unsigned short int, "     *h ", "     *.*h " )
+IntegralFMTImpl( signed int, "     * ", "     *.* " )
+IntegralFMTImpl( unsigned int, "     * ", "     *.* " )
+IntegralFMTImpl( signed long int, "     *l ", "     *.*l " )
+IntegralFMTImpl( unsigned long int, "     *l ", "     *.*l " )
+IntegralFMTImpl( signed long long int, "     *ll ", "     *.*ll " )
+IntegralFMTImpl( unsigned long long int, "     *ll ", "     *.*ll " )
+
+
 #if defined( __SIZEOF_INT128__ )
 // Default prefix for non-decimal prints is 0b, 0, 0x.
@@ -746,25 +626,50 @@
 IntegralFMTImpl128( unsigned int128 )
 #endif // __SIZEOF_INT128__
-#endif // 0
 
 // *********************************** floating point ***********************************
 
-#define PrintWithDP2( os, format, val, ... ) \
+static const char *suffixes[] = {
+	"y", "z", "a", "f", "p", "n", "u", "m", "",
+	"K", "M", "G", "T", "P", "E", "Z", "Y"
+}; 
+#define SUFFIXES_START (-24) /* Smallest power for which there is a suffix defined. */
+#define SUFFIXES_END (SUFFIXES_START + (int)((sizeof(suffixes) / sizeof(char *) - 1) * 3))
+
+#define PrintWithDP2( os, format, ... ) \
 	{ \
-		enum { size = 48 }; \
-		char buf[size]; \
-		int bufbeg = 0, i, len = snprintf( buf, size, format, ##__VA_ARGS__, val ); \
-		if ( isfinite( val ) && (f.base != 'g' || f.pc != 0) ) { /* if number, print decimal point */ \
-			for ( i = 0; i < len && buf[i] != '.' && buf[i] != 'e' && buf[i] != 'E'; i += 1 ); /* decimal point or scientific ? */ \
-			if ( i == len && ! f.flags.nobsdp ) { \
-				if ( ! f.flags.left ) { \
-					buf[i] = '.'; buf[i + 1] = '\0'; \
-					if ( buf[0] == ' ' ) bufbeg = 1;	/* decimal point within width */ \
-				} else { \
-					for ( i = 0; i < len && buf[i] != ' '; i += 1 ); /* trailing blank ? */ \
-					buf[i] = '.'; \
-					if ( i == len ) buf[i + 1] = '\0'; \
+		if ( ! f.flags.eng ) { \
+			len = snprintf( buf, size, format, ##__VA_ARGS__ ); \
+			if ( isfinite( f.val ) && ( f.pc != 0 || ! f.flags.nobsdp ) ) { /* if number, print decimal point when no fraction or exponent */ \
+				for ( i = 0; i < len && buf[i] != '.' && buf[i] != 'e' && buf[i] != 'E'; i += 1 ); /* decimal point or scientific ? */ \
+				if ( i == len ) { \
+					if ( ! f.flags.left ) { \
+						buf[i] = '.'; buf[i + 1] = '\0'; \
+						if ( buf[0] == ' ' ) bufbeg = 1; /* decimal point within width */ \
+					} else { \
+						for ( i = 0; i < len && buf[i] != ' '; i += 1 ); /* trailing blank ? */ \
+						buf[i] = '.'; \
+						if ( i == len ) buf[i + 1] = '\0'; \
+					} /* if */ \
 				} /* if */ \
 			} /* if */ \
+		} else { \
+			int exp10, len2; \
+			eng( f.val, f.pc, exp10 );					/* changes arguments */ \
+			if ( ! f.flags.left && f.wd > 1 ) { \
+				/* Exponent size (number of digits, 'e', optional minus sign) */ \
+				f.wd -= lrint( floor( log10( abs( exp10 ) ) ) ) + 1 + 1 + (exp10 < 0 ? 1 : 0); \
+				if ( f.wd < 1 ) f.wd = 1; \
+			} /* if */ \
+			len = snprintf( buf, size, format, ##__VA_ARGS__ ); \
+			if ( f.flags.left ) { \
+				for ( len -= 1; len > 0 && buf[len] == ' '; len -= 1 ); \
+				len += 1; \
+			} /* if */ \
+			if ( ! f.flags.nobsdp || (exp10 < SUFFIXES_START) || (exp10 > SUFFIXES_END) ) { \
+				len2 = snprintf( &buf[len], size - len, "e%d", exp10 ); \
+			} else { \
+				len2 = snprintf( &buf[len], size - len, "%s", suffixes[(exp10 - SUFFIXES_START) / 3] ); \
+			} /* if */ \
+			if ( f.flags.left && len + len2 < f.wd ) buf[len + len2] = ' '; \
 		} /* if */ \
 		fmt( os, "%s", &buf[bufbeg] ); \
@@ -773,7 +678,19 @@
 #define FloatingPointFMTImpl( T, DFMTNP, DFMTP ) \
 forall( ostype & | ostream( ostype ) ) { \
+	static void eng( T &value, int & pc, int & exp10 ) { \
+		exp10 = lrint( floor( log10( abs( value ) ) ) ); /* round to desired precision */ \
+		if ( exp10 < 0 ) exp10 -= 2; \
+		exp10 = floor( exp10, 3 ); \
+		value *= pow( 10.0, -exp10 ); \
+		if ( pc <= 3 ) pc = 3; \
+	} /* eng */ \
+\
 	ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \
+		enum { size = 48 }; \
+		char buf[size]; \
+		int bufbeg = 0, i, len; \
+\
 		if ( $sepPrt( os ) ) fmt( os, "%s", $sepGetCur( os ) ); \
-		char fmtstr[sizeof(DFMTP)];						/* sizeof includes '\0' */ \
+		char fmtstr[sizeof(DFMTP) + 8];					/* sizeof includes '\0' */ \
 		if ( ! f.flags.pc ) memcpy( &fmtstr, DFMTNP, sizeof(DFMTNP) ); \
 		else memcpy( &fmtstr, DFMTP, sizeof(DFMTP) ); \
@@ -789,9 +706,9 @@
 			fmtstr[sizeof(DFMTNP)-2] = f.base;			/* sizeof includes '\0' */ \
 			/* printf( "%g %d %s\n", f.val, f.wd, &fmtstr[star]); */ \
-			PrintWithDP2( os, &fmtstr[star], f.val, f.wd ) \
+			PrintWithDP2( os, &fmtstr[star], f.wd, f.val ) \
 		} else {										/* precision */ \
 			fmtstr[sizeof(DFMTP)-2] = f.base;			/* sizeof includes '\0' */ \
 			/* printf( "%g %d %d %s\n", f.val, f.wd, f.pc, &fmtstr[star] ); */ \
-			PrintWithDP2( os, &fmtstr[star], f.val, f.wd, f.pc ) \
+			PrintWithDP2( os, &fmtstr[star], f.wd, f.pc, f.val ) \
 		} /* if */ \
 		return os; \
@@ -801,6 +718,6 @@
 } // distribution
 
-FloatingPointFMTImpl( double, "%    * ", "%    *.* " )
-FloatingPointFMTImpl( long double, "%    *L ", "%    *.*L " )
+FloatingPointFMTImpl( double, "     * ", "     *.* " )
+FloatingPointFMTImpl( long double, "     *L ", "     *.*L " )
 
 // *********************************** character ***********************************
Index: libcfa/src/iostream.hfa
===================================================================
--- libcfa/src/iostream.hfa	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ libcfa/src/iostream.hfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar  2 14:05:08 2021
-// Update Count     : 369
+// Last Modified On : Tue Apr 13 13:05:11 2021
+// Update Count     : 384
 //
 
@@ -158,9 +158,10 @@
 struct _Ostream_Manip {
 	T val;												// polymorphic base-type
-	unsigned int wd, pc;								// width, precision
+	int wd, pc;											// width, precision
 	char base;											// numeric base / floating-point style
 	union {
 		unsigned char all;
 		struct {
+			unsigned char eng:1;						// engineering notation
 			unsigned char neg:1;						// val is negative
 			unsigned char pc:1;							// precision specified
@@ -222,9 +223,11 @@
 	_Ostream_Manip(T) hex( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'a', { .all : 0 } }; } \
 	_Ostream_Manip(T) sci( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'e', { .all : 0 } }; } \
-	_Ostream_Manip(T) wd( unsigned int w, T val ) { return (_Ostream_Manip(T))@{ val, w, 0, 'f', { .all : 0 } }; } \
+	_Ostream_Manip(T) eng( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'g', { .flags.eng : true } }; } \
+	_Ostream_Manip(T) wd( unsigned int w, T val ) { return (_Ostream_Manip(T))@{ val, w, 0, 'g', { .all : 0 } }; } \
 	_Ostream_Manip(T) wd( unsigned int w, unsigned char pc, T val ) { return (_Ostream_Manip(T))@{ val, w, pc, 'f', { .flags.pc : true } }; } \
 	_Ostream_Manip(T) ws( unsigned int w, unsigned char pc, T val ) { return (_Ostream_Manip(T))@{ val, w, pc, 'g', { .flags.pc : true } }; } \
-	_Ostream_Manip(T) & wd( unsigned int w, _Ostream_Manip(T) & fmt ) { fmt.wd = w; return fmt; } \
-	_Ostream_Manip(T) & wd( unsigned int w, unsigned char pc, _Ostream_Manip(T) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \
+	_Ostream_Manip(T) & wd( unsigned int w, _Ostream_Manip(T) & fmt ) { if ( fmt.flags.eng ) fmt.base = 'f'; fmt.wd = w; return fmt; } \
+	_Ostream_Manip(T) & wd( unsigned int w, unsigned char pc, _Ostream_Manip(T) & fmt ) { if ( fmt.flags.eng ) fmt.base = 'f'; fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \
+	_Ostream_Manip(T) & ws( unsigned int w, unsigned char pc, _Ostream_Manip(T) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \
 	_Ostream_Manip(T) & left( _Ostream_Manip(T) & fmt ) { fmt.flags.left = true; return fmt; } \
 	_Ostream_Manip(T) upcase( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'G', { .all : 0 } }; } \
@@ -235,4 +238,6 @@
 	_Ostream_Manip(T) nodp( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'g', { .flags.nobsdp : true } }; } \
 	_Ostream_Manip(T) & nodp( _Ostream_Manip(T) & fmt ) { fmt.flags.nobsdp = true; return fmt; } \
+	_Ostream_Manip(T) unit( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'g', { .flags.nobsdp : true } }; } \
+	_Ostream_Manip(T) & unit( _Ostream_Manip(T) & fmt ) { fmt.flags.nobsdp = true; return fmt; } \
 } /* distribution */ \
 forall( ostype & | ostream( ostype ) ) { \
Index: libcfa/src/math.hfa
===================================================================
--- libcfa/src/math.hfa	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ libcfa/src/math.hfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -10,6 +10,6 @@
 // Created On       : Mon Apr 18 23:37:04 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Aug 24 08:56:20 2020
-// Update Count     : 126
+// Last Modified On : Mon Apr 12 18:35:39 2021
+// Update Count     : 131
 //
 
@@ -100,4 +100,9 @@
 	long double _Complex log( long double _Complex x ) { return clogl( x ); }
 
+	// O(1) polymorphic integer log2, using clz, which returns the number of leading 0-bits, starting at the most
+	// significant bit (single instruction on x86)
+	int log2( unsigned int n ) { return n == 0 ? -1 : sizeof(n) * __CHAR_BIT__ - 1 - __builtin_clz( n ); }
+	long int log2( unsigned long int n ) { return n == 0 ? -1 : sizeof(n) * __CHAR_BIT__ - 1 - __builtin_clzl( n ); }
+	long long int log2( unsigned long long int n ) { return n == 0 ? -1 : sizeof(n) * __CHAR_BIT__ - 1 - __builtin_clzl( n ); }
 	float log2( float x ) { return log2f( x ); }
 	// extern "C" { double log2( double ); }
Index: tests/.expect/KRfunctions.nast.x64.txt
===================================================================
--- tests/.expect/KRfunctions.nast.x64.txt	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/.expect/KRfunctions.nast.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -104,6 +104,6 @@
     signed int _X1bi_2;
     {
-        signed int *(*_tmp_cp_ret4)(signed int __param_0, signed int __param_1);
-        ((void)(_X1xFPi_ii__2=(((void)(_tmp_cp_ret4=_X3f10FFPi_ii__iPiPid__1(3, (&_X1ai_2), (&_X1bi_2), 3.5))) , _tmp_cp_ret4)));
+        signed int *(*_tmp_cp_ret6)(signed int __param_0, signed int __param_1);
+        ((void)(_X1xFPi_ii__2=(((void)(_tmp_cp_ret6=_X3f10FFPi_ii__iPiPid__1(3, (&_X1ai_2), (&_X1bi_2), 3.5))) , _tmp_cp_ret6)));
     }
 
Index: tests/.expect/declarationSpecifier.x64.txt
===================================================================
--- tests/.expect/declarationSpecifier.x64.txt	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/.expect/declarationSpecifier.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -1147,6 +1147,6 @@
 
     {
-        signed int _tmp_cp_ret4;
-        ((void)(_X12_retval_maini_1=(((void)(_tmp_cp_ret4=invoke_main(_X4argci_1, _X4argvPPc_1, _X4envpPPc_1))) , _tmp_cp_ret4)) /* ?{} */);
+        signed int _tmp_cp_ret6;
+        ((void)(_X12_retval_maini_1=(((void)(_tmp_cp_ret6=invoke_main(_X4argci_1, _X4argvPPc_1, _X4envpPPc_1))) , _tmp_cp_ret6)) /* ?{} */);
     }
 
Index: tests/.expect/extension.x64.txt
===================================================================
--- tests/.expect/extension.x64.txt	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/.expect/extension.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -457,6 +457,6 @@
 
     {
-        signed int _tmp_cp_ret4;
-        ((void)(((void)(_tmp_cp_ret4=__extension__ _X4fredFi_i__1(3))) , _tmp_cp_ret4));
+        signed int _tmp_cp_ret6;
+        ((void)(((void)(_tmp_cp_ret6=__extension__ _X4fredFi_i__1(3))) , _tmp_cp_ret6));
     }
 
Index: tests/.expect/gccExtensions.x64.txt
===================================================================
--- tests/.expect/gccExtensions.x64.txt	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/.expect/gccExtensions.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -339,6 +339,6 @@
 
     {
-        signed int _tmp_cp_ret4;
-        ((void)(_X12_retval_maini_1=(((void)(_tmp_cp_ret4=invoke_main(_X4argci_1, _X4argvPPc_1, _X4envpPPc_1))) , _tmp_cp_ret4)) /* ?{} */);
+        signed int _tmp_cp_ret6;
+        ((void)(_X12_retval_maini_1=(((void)(_tmp_cp_ret6=invoke_main(_X4argci_1, _X4argvPPc_1, _X4envpPPc_1))) , _tmp_cp_ret6)) /* ?{} */);
     }
 
Index: tests/.expect/math.nast.x64.txt
===================================================================
--- tests/.expect/math.nast.x64.txt	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/.expect/math.nast.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -17,4 +17,8 @@
 4 16
 log:0. 0. 0. 0.346574+0.785398i 0.346573590279973+0.785398163397448i 0.346573590279972655+0.78539816339744831i
+log2:10 17 23
+log2:10 17 23
+log2:10 17 23
+log2:10. 17. 23.
 log2:3. 3. 3.
 log10:2. 2. 2.
Index: tests/io/.expect/manipulatorsOutput1.x64.txt
===================================================================
--- tests/io/.expect/manipulatorsOutput1.x64.txt	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/io/.expect/manipulatorsOutput1.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -29,11 +29,11 @@
 float
 0         3  3.00000 3.537    3.537        4       4.      3.5      3.5 3        3.5      3.5      +3.5     +3.5     000003.5 3.54E+00 0x1.c5p+1 0X1.C5P+1 3.54e+00
-0. 3.000000 3.000000 3.537 3.537000        4        4      3.5      3.5 3.       3.5      3.5      +3.5     +3.5     000003.5 3.54E+00 0x1.c5p+1 0X1.C5P+1 3.54e+00
+0.       3.        3 3.537    3.537       4.        4      3.5      3.5 3.       3.5      3.5      +3.5     +3.5     000003.5 3.54E+00 0x1.c5p+1 0X1.C5P+1 3.54e+00
 double
-0  3.000000 3.537 3.537000       4.        4     3.54 3.54     +3.54    00003.54 3.54E+00 0x1.c5p+1 0X1.C5P+1 3.54e+00
-0. 3.000000 3.537 3.537000        4       4.     3.54 3.54     +3.54    00003.54 3.54E+00 0x1.c5p+1 0X1.C5P+1 3.54e+00
+0         3  3.00000 3.537    3.537        4       4.      3.5      3.5 3        3.5      3.5      +3.5     +3.5     000003.5 3.54E+00 0x1.c5p+1 0X1.C5P+1 3.54e+00
+0.       3.        3 3.537    3.537       4.        4      3.5      3.5 3.       3.5      3.5      +3.5     +3.5     000003.5 3.54E+00 0x1.c5p+1 0X1.C5P+1 3.54e+00
 long double
-0  3.000000 3.537 3.537000       4.        4     3.54 3.54     +3.54    00003.54 3.54E+00 0xe.26p-2 0XE.26P-2 3.54e+00
-0. 3.000000 3.53699999999999992 3.537000        4       4.     3.54 3.54     +3.54    00003.54 3.54E+00 0xe.26p-2 0XE.26P-2 3.54e+00
+0         3  3.00000 3.537    3.537        4       4.      3.5      3.5 3        3.5      3.5      +3.5     +3.5     000003.5 3.54E+00 0xe.26p-2 0XE.26P-2 3.54e+00
+0.       3.        3 3.53699999999999992    3.537       4.        4      3.5      3.5 3.       3.5      3.5      +3.5     +3.5     000003.5 3.54E+00 0xe.26p-2 0XE.26P-2 3.54e+00
 
 char
Index: tests/io/.expect/manipulatorsOutput2.x64.txt
===================================================================
--- tests/io/.expect/manipulatorsOutput2.x64.txt	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/io/.expect/manipulatorsOutput2.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -9,13 +9,14 @@
 -0x1.b8p+4 -0x1.b8p+4 -0xd.cp+1
 0.000000e+00 2.750000e+01 -2.750000e+01
+0e0 27.5e0 -27.5e0
 0B11011 0X1B 2.75E-09 0X1.B8P+4
 11011 33 1b
 0. 0 27. 27 27.5
-+27 -27 +27 -27 +27.5 -27.5
++27 -27 +27. -27. +27.5 -27.5
   34  34 34
-  4.000000  4.000000 4.000000
+        4.        4.       4.
   ab  ab ab
 34567 34567 34567
-3456.000000 3456.000000 3456.000000
+3456. 3456. 3456.
 abcde abcde abcde
  034     0034 0000000034
@@ -24,5 +25,5 @@
 27.500     27.5      28. 27.50000000
 27.000 27.500     27.5      28. 27.50000000
-27   27.000000  27.500000  027  27.500    
+27   27.        27.5       027  27.500    
 234.567 234.57  234.6   235.
 234567. 2.3457e+05 2.346e+05 2.35e+05
Index: tests/io/.expect/manipulatorsOutput4.x64.txt
===================================================================
--- tests/io/.expect/manipulatorsOutput4.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
+++ tests/io/.expect/manipulatorsOutput4.x64.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -0,0 +1,226 @@
+1e-27 1e-27 +1e-27        1e-27       +1e-27  1.00000e-27 +1.00000e-27 00000001e-27 +0000001e-27 01.00000e-27 +1.00000e-27 1e-27        +1e-27       1.00000e-27  +1.00000e-27 1e-27        +1e-27       1.00000e-27  +1.00000e-27
+1e-26 10e-27 +10e-27       10e-27      +10e-27 10.00000e-27 +10.00000e-27 00000010e-27 +0000010e-27 10.00000e-27 +10.00000e-27 10e-27       +10e-27      10.00000e-27 +10.00000e-27 10e-27       +10e-27      10.00000e-27 +10.00000e-27
+1e-25 100e-27 +100e-27      100e-27     +100e-27 100.00000e-27 +100.00000e-27 00000100e-27 +0000100e-27 100.00000e-27 +100.00000e-27 100e-27      +100e-27     100.00000e-27 +100.00000e-27 100e-27      +100e-27     100.00000e-27 +100.00000e-27
+1e-24 1e-24 +1e-24        1e-24       +1e-24  1.00000e-24 +1.00000e-24 00000001e-24 +0000001e-24 01.00000e-24 +1.00000e-24 1e-24        +1e-24       1.00000e-24  +1.00000e-24 1e-24        +1e-24       1.00000e-24  +1.00000e-24
+1e-23 10e-24 +10e-24       10e-24      +10e-24 10.00000e-24 +10.00000e-24 00000010e-24 +0000010e-24 10.00000e-24 +10.00000e-24 10e-24       +10e-24      10.00000e-24 +10.00000e-24 10e-24       +10e-24      10.00000e-24 +10.00000e-24
+1e-22 100e-24 +100e-24      100e-24     +100e-24 100.00000e-24 +100.00000e-24 00000100e-24 +0000100e-24 100.00000e-24 +100.00000e-24 100e-24      +100e-24     100.00000e-24 +100.00000e-24 100e-24      +100e-24     100.00000e-24 +100.00000e-24
+1e-21 1e-21 +1e-21        1e-21       +1e-21  1.00000e-21 +1.00000e-21 00000001e-21 +0000001e-21 01.00000e-21 +1.00000e-21 1e-21        +1e-21       1.00000e-21  +1.00000e-21 1e-21        +1e-21       1.00000e-21  +1.00000e-21
+1e-20 10e-21 +10e-21       10e-21      +10e-21 10.00000e-21 +10.00000e-21 00000010e-21 +0000010e-21 10.00000e-21 +10.00000e-21 10e-21       +10e-21      10.00000e-21 +10.00000e-21 10e-21       +10e-21      10.00000e-21 +10.00000e-21
+1e-19 100e-21 +100e-21      100e-21     +100e-21 100.00000e-21 +100.00000e-21 00000100e-21 +0000100e-21 100.00000e-21 +100.00000e-21 100e-21      +100e-21     100.00000e-21 +100.00000e-21 100e-21      +100e-21     100.00000e-21 +100.00000e-21
+1e-18 1e-18 +1e-18        1e-18       +1e-18  1.00000e-18 +1.00000e-18 00000001e-18 +0000001e-18 01.00000e-18 +1.00000e-18 1e-18        +1e-18       1.00000e-18  +1.00000e-18 1e-18        +1e-18       1.00000e-18  +1.00000e-18
+1e-17 10e-18 +10e-18       10e-18      +10e-18 10.00000e-18 +10.00000e-18 00000010e-18 +0000010e-18 10.00000e-18 +10.00000e-18 10e-18       +10e-18      10.00000e-18 +10.00000e-18 10e-18       +10e-18      10.00000e-18 +10.00000e-18
+1e-16 100e-18 +100e-18      100e-18     +100e-18 100.00000e-18 +100.00000e-18 00000100e-18 +0000100e-18 100.00000e-18 +100.00000e-18 100e-18      +100e-18     100.00000e-18 +100.00000e-18 100e-18      +100e-18     100.00000e-18 +100.00000e-18
+1e-15 1e-15 +1e-15        1e-15       +1e-15  1.00000e-15 +1.00000e-15 00000001e-15 +0000001e-15 01.00000e-15 +1.00000e-15 1e-15        +1e-15       1.00000e-15  +1.00000e-15 1e-15        +1e-15       1.00000e-15  +1.00000e-15
+1e-14 10e-15 +10e-15       10e-15      +10e-15 10.00000e-15 +10.00000e-15 00000010e-15 +0000010e-15 10.00000e-15 +10.00000e-15 10e-15       +10e-15      10.00000e-15 +10.00000e-15 10e-15       +10e-15      10.00000e-15 +10.00000e-15
+1e-13 100e-15 +100e-15      100e-15     +100e-15 100.00000e-15 +100.00000e-15 00000100e-15 +0000100e-15 100.00000e-15 +100.00000e-15 100e-15      +100e-15     100.00000e-15 +100.00000e-15 100e-15      +100e-15     100.00000e-15 +100.00000e-15
+1e-12 1e-12 +1e-12        1e-12       +1e-12  1.00000e-12 +1.00000e-12 00000001e-12 +0000001e-12 01.00000e-12 +1.00000e-12 1e-12        +1e-12       1.00000e-12  +1.00000e-12 1e-12        +1e-12       1.00000e-12  +1.00000e-12
+1e-11 10e-12 +10e-12       10e-12      +10e-12 10.00000e-12 +10.00000e-12 00000010e-12 +0000010e-12 10.00000e-12 +10.00000e-12 10e-12       +10e-12      10.00000e-12 +10.00000e-12 10e-12       +10e-12      10.00000e-12 +10.00000e-12
+1e-10 100e-12 +100e-12      100e-12     +100e-12 100.00000e-12 +100.00000e-12 00000100e-12 +0000100e-12 100.00000e-12 +100.00000e-12 100e-12      +100e-12     100.00000e-12 +100.00000e-12 100e-12      +100e-12     100.00000e-12 +100.00000e-12
+1e-09 1e-9 +1e-9         1e-9        +1e-9   1.00000e-9  +1.00000e-9 000000001e-9 +00000001e-9 001.00000e-9 +01.00000e-9 1e-9         +1e-9        1.00000e-9   +1.00000e-9  1e-9         +1e-9        1.00000e-9   +1.00000e-9 
+1e-08 10e-9 +10e-9        10e-9       +10e-9  10.00000e-9 +10.00000e-9 000000010e-9 +00000010e-9 010.00000e-9 +10.00000e-9 10e-9        +10e-9       10.00000e-9  +10.00000e-9 10e-9        +10e-9       10.00000e-9  +10.00000e-9
+1e-07 100e-9 +100e-9       100e-9      +100e-9 100.00000e-9 +100.00000e-9 000000100e-9 +00000100e-9 100.00000e-9 +100.00000e-9 100e-9       +100e-9      100.00000e-9 +100.00000e-9 100e-9       +100e-9      100.00000e-9 +100.00000e-9
+1e-06 1e-6 +1e-6         1e-6        +1e-6   1.00000e-6  +1.00000e-6 000000001e-6 +00000001e-6 001.00000e-6 +01.00000e-6 1e-6         +1e-6        1.00000e-6   +1.00000e-6  1e-6         +1e-6        1.00000e-6   +1.00000e-6 
+1e-05 10e-6 +10e-6        10e-6       +10e-6  10.00000e-6 +10.00000e-6 000000010e-6 +00000010e-6 010.00000e-6 +10.00000e-6 10e-6        +10e-6       10.00000e-6  +10.00000e-6 10e-6        +10e-6       10.00000e-6  +10.00000e-6
+0.0001 100e-6 +100e-6       100e-6      +100e-6 100.00000e-6 +100.00000e-6 000000100e-6 +00000100e-6 100.00000e-6 +100.00000e-6 100e-6       +100e-6      100.00000e-6 +100.00000e-6 100e-6       +100e-6      100.00000e-6 +100.00000e-6
+0.001 1e-3 +1e-3         1e-3        +1e-3   1.00000e-3  +1.00000e-3 000000001e-3 +00000001e-3 001.00000e-3 +01.00000e-3 1e-3         +1e-3        1.00000e-3   +1.00000e-3  1e-3         +1e-3        1.00000e-3   +1.00000e-3 
+0.01 10e-3 +10e-3        10e-3       +10e-3  10.00000e-3 +10.00000e-3 000000010e-3 +00000010e-3 010.00000e-3 +10.00000e-3 10e-3        +10e-3       10.00000e-3  +10.00000e-3 10e-3        +10e-3       10.00000e-3  +10.00000e-3
+0.1 100e-3 +100e-3       100e-3      +100e-3 100.00000e-3 +100.00000e-3 000000100e-3 +00000100e-3 100.00000e-3 +100.00000e-3 100e-3       +100e-3      100.00000e-3 +100.00000e-3 100e-3       +100e-3      100.00000e-3 +100.00000e-3
+1. 1e0 +1e0          1e0         +1e0    1.00000e0   +1.00000e0 0000000001e0 +000000001e0 0001.00000e0 +001.00000e0 1e0          +1e0         1.00000e0    +1.00000e0   1e0          +1e0         1.00000e0    +1.00000e0  
+10. 10e0 +10e0         10e0        +10e0   10.00000e0  +10.00000e0 0000000010e0 +000000010e0 0010.00000e0 +010.00000e0 10e0         +10e0        10.00000e0   +10.00000e0  10e0         +10e0        10.00000e0   +10.00000e0 
+100. 100e0 +100e0        100e0       +100e0  100.00000e0 +100.00000e0 0000000100e0 +000000100e0 0100.00000e0 +100.00000e0 100e0        +100e0       100.00000e0  +100.00000e0 100e0        +100e0       100.00000e0  +100.00000e0
+1000. 1e3 +1e3          1e3         +1e3    1.00000e3   +1.00000e3 0000000001e3 +000000001e3 0001.00000e3 +001.00000e3 1e3          +1e3         1.00000e3    +1.00000e3   1e3          +1e3         1.00000e3    +1.00000e3  
+10000. 10e3 +10e3         10e3        +10e3   10.00000e3  +10.00000e3 0000000010e3 +000000010e3 0010.00000e3 +010.00000e3 10e3         +10e3        10.00000e3   +10.00000e3  10e3         +10e3        10.00000e3   +10.00000e3 
+100000. 100e3 +100e3        100e3       +100e3  100.00000e3 +100.00000e3 0000000100e3 +000000100e3 0100.00000e3 +100.00000e3 100e3        +100e3       100.00000e3  +100.00000e3 100e3        +100e3       100.00000e3  +100.00000e3
+1000000. 1e6 +1e6          1e6         +1e6    1.00000e6   +1.00000e6 0000000001e6 +000000001e6 0001.00000e6 +001.00000e6 1e6          +1e6         1.00000e6    +1.00000e6   1e6          +1e6         1.00000e6    +1.00000e6  
+10000000. 10e6 +10e6         10e6        +10e6   10.00000e6  +10.00000e6 0000000010e6 +000000010e6 0010.00000e6 +010.00000e6 10e6         +10e6        10.00000e6   +10.00000e6  10e6         +10e6        10.00000e6   +10.00000e6 
+100000000. 100e6 +100e6        100e6       +100e6  100.00000e6 +100.00000e6 0000000100e6 +000000100e6 0100.00000e6 +100.00000e6 100e6        +100e6       100.00000e6  +100.00000e6 100e6        +100e6       100.00000e6  +100.00000e6
+1000000000. 1e9 +1e9          1e9         +1e9    1.00000e9   +1.00000e9 0000000001e9 +000000001e9 0001.00000e9 +001.00000e9 1e9          +1e9         1.00000e9    +1.00000e9   1e9          +1e9         1.00000e9    +1.00000e9  
+10000000000. 10e9 +10e9         10e9        +10e9   10.00000e9  +10.00000e9 0000000010e9 +000000010e9 0010.00000e9 +010.00000e9 10e9         +10e9        10.00000e9   +10.00000e9  10e9         +10e9        10.00000e9   +10.00000e9 
+100000000000. 100e9 +100e9        100e9       +100e9  100.00000e9 +100.00000e9 0000000100e9 +000000100e9 0100.00000e9 +100.00000e9 100e9        +100e9       100.00000e9  +100.00000e9 100e9        +100e9       100.00000e9  +100.00000e9
+1000000000000. 1e12 +1e12         1e12        +1e12   1.00000e12  +1.00000e12 000000001e12 +00000001e12 001.00000e12 +01.00000e12 1e12         +1e12        1.00000e12   +1.00000e12  1e12         +1e12        1.00000e12   +1.00000e12 
+10000000000000. 10e12 +10e12        10e12       +10e12  10.00000e12 +10.00000e12 000000010e12 +00000010e12 010.00000e12 +10.00000e12 10e12        +10e12       10.00000e12  +10.00000e12 10e12        +10e12       10.00000e12  +10.00000e12
+100000000000000. 100e12 +100e12       100e12      +100e12 100.00000e12 +100.00000e12 000000100e12 +00000100e12 100.00000e12 +100.00000e12 100e12       +100e12      100.00000e12 +100.00000e12 100e12       +100e12      100.00000e12 +100.00000e12
+1e+15 1e15 +1e15         1e15        +1e15   1.00000e15  +1.00000e15 000000001e15 +00000001e15 001.00000e15 +01.00000e15 1e15         +1e15        1.00000e15   +1.00000e15  1e15         +1e15        1.00000e15   +1.00000e15 
+1e+16 10e15 +10e15        10e15       +10e15  10.00000e15 +10.00000e15 000000010e15 +00000010e15 010.00000e15 +10.00000e15 10e15        +10e15       10.00000e15  +10.00000e15 10e15        +10e15       10.00000e15  +10.00000e15
+1e+17 100e15 +100e15       100e15      +100e15 100.00000e15 +100.00000e15 000000100e15 +00000100e15 100.00000e15 +100.00000e15 100e15       +100e15      100.00000e15 +100.00000e15 100e15       +100e15      100.00000e15 +100.00000e15
+1e+18 1e18 +1e18         1e18        +1e18   1.00000e18  +1.00000e18 000000001e18 +00000001e18 001.00000e18 +01.00000e18 1e18         +1e18        1.00000e18   +1.00000e18  1e18         +1e18        1.00000e18   +1.00000e18 
+1e+19 10e18 +10e18        10e18       +10e18  10.00000e18 +10.00000e18 000000010e18 +00000010e18 010.00000e18 +10.00000e18 10e18        +10e18       10.00000e18  +10.00000e18 10e18        +10e18       10.00000e18  +10.00000e18
+1e+20 100e18 +100e18       100e18      +100e18 100.00000e18 +100.00000e18 000000100e18 +00000100e18 100.00000e18 +100.00000e18 100e18       +100e18      100.00000e18 +100.00000e18 100e18       +100e18      100.00000e18 +100.00000e18
+1e+21 1e21 +1e21         1e21        +1e21   1.00000e21  +1.00000e21 000000001e21 +00000001e21 001.00000e21 +01.00000e21 1e21         +1e21        1.00000e21   +1.00000e21  1e21         +1e21        1.00000e21   +1.00000e21 
+1e+22 10e21 +10e21        10e21       +10e21  10.00000e21 +10.00000e21 000000010e21 +00000010e21 010.00000e21 +10.00000e21 10e21        +10e21       10.00000e21  +10.00000e21 10e21        +10e21       10.00000e21  +10.00000e21
+1e+23 100e21 +100e21       100e21      +100e21 100.00000e21 +100.00000e21 000000100e21 +00000100e21 100.00000e21 +100.00000e21 100e21       +100e21      100.00000e21 +100.00000e21 100e21       +100e21      100.00000e21 +100.00000e21
+1e+24 1e24 +1e24         1e24        +1e24   1.00000e24  +1.00000e24 000000001e24 +00000001e24 001.00000e24 +01.00000e24 1e24         +1e24        1.00000e24   +1.00000e24  1e24         +1e24        1.00000e24   +1.00000e24 
+1e+25 10e24 +10e24        10e24       +10e24  10.00000e24 +10.00000e24 000000010e24 +00000010e24 010.00000e24 +10.00000e24 10e24        +10e24       10.00000e24  +10.00000e24 10e24        +10e24       10.00000e24  +10.00000e24
+1e+26 100e24 +100e24       100e24      +100e24 100.00000e24 +100.00000e24 000000100e24 +00000100e24 100.00000e24 +100.00000e24 100e24       +100e24      100.00000e24 +100.00000e24 100e24       +100e24      100.00000e24 +100.00000e24
+1e+27 1e27 +1e27         1e27        +1e27   1.00000e27  +1.00000e27 000000001e27 +00000001e27 001.00000e27 +01.00000e27 1e27         +1e27        1.00000e27   +1.00000e27  1e27         +1e27        1.00000e27   +1.00000e27 
+1e+28 10e27 +10e27        10e27       +10e27  10.00000e27 +10.00000e27 000000010e27 +00000010e27 010.00000e27 +10.00000e27 10e27        +10e27       10.00000e27  +10.00000e27 10e27        +10e27       10.00000e27  +10.00000e27
+1e+29 100e27 +100e27       100e27      +100e27 100.00000e27 +100.00000e27 000000100e27 +00000100e27 100.00000e27 +100.00000e27 100e27       +100e27      100.00000e27 +100.00000e27 100e27       +100e27      100.00000e27 +100.00000e27
+
+1e-27 1e-27 +1e-27        1e-27       +1e-27  1.00000e-27 +1.00000e-27 00000001e-27 +0000001e-27 01.00000e-27 +1.00000e-27 1e-27        +1e-27       1.00000e-27  +1.00000e-27 1e-27        +1e-27       1.00000e-27  +1.00000e-27
+4.2e-26 42e-27 +42e-27       42e-27      +42e-27 42.00000e-27 +42.00000e-27 00000042e-27 +0000042e-27 42.00000e-27 +42.00000e-27 42e-27       +42e-27      42.00000e-27 +42.00000e-27 42e-27       +42e-27      42.00000e-27 +42.00000e-27
+1.764e-24 1.764e-24 +1.764e-24    1.764e-24   +1.764e-24  1.76400e-24 +1.76400e-24 0001.764e-24 +001.764e-24 01.76400e-24 +1.76400e-24 1.764e-24    +1.764e-24   1.76400e-24  +1.76400e-24 1.764e-24    +1.764e-24   1.76400e-24  +1.76400e-24
+7.4088e-23 74.088e-24 +74.088e-24   74.088e-24  +74.088e-24 74.08800e-24 +74.08800e-24 0074.088e-24 +074.088e-24 74.08800e-24 +74.08800e-24 74.088e-24   +74.088e-24  74.08800e-24 +74.08800e-24 74.088e-24   +74.088e-24  74.08800e-24 +74.08800e-24
+3.111696e-21 3.1117e-21 +3.1117e-21   3.1117e-21  +3.1117e-21  3.11170e-21 +3.11170e-21 003.1117e-21 +03.1117e-21 03.11170e-21 +3.11170e-21 3.1117e-21   +3.1117e-21  3.11170e-21  +3.11170e-21 3.1117e-21   +3.1117e-21  3.11170e-21  +3.11170e-21
+1.30691232e-19 130.691e-21 +130.691e-21   130.69e-21  +130.69e-21 130.69123e-21 +130.69123e-21 00130.69e-21 +0130.69e-21 130.69123e-21 +130.69123e-21 130.69e-21   +130.69e-21  130.69123e-21 +130.69123e-21 130.69e-21   +130.69e-21  130.69123e-21 +130.69123e-21
+5.489031744e-18 5.48903e-18 +5.48903e-18    5.489e-18   +5.489e-18  5.48903e-18 +5.48903e-18 0005.489e-18 +005.489e-18 05.48903e-18 +5.48903e-18 5.489e-18    +5.489e-18   5.48903e-18  +5.48903e-18 5.489e-18    +5.489e-18   5.48903e-18  +5.48903e-18
+2.30539333248e-16 230.539e-18 +230.539e-18   230.54e-18  +230.54e-18 230.53933e-18 +230.53933e-18 00230.54e-18 +0230.54e-18 230.53933e-18 +230.53933e-18 230.54e-18   +230.54e-18  230.53933e-18 +230.53933e-18 230.54e-18   +230.54e-18  230.53933e-18 +230.53933e-18
+9.682651996416e-15 9.68265e-15 +9.68265e-15   9.6827e-15  +9.6827e-15  9.68265e-15 +9.68265e-15 009.6827e-15 +09.6827e-15 09.68265e-15 +9.68265e-15 9.6827e-15   +9.6827e-15  9.68265e-15  +9.68265e-15 9.6827e-15   +9.6827e-15  9.68265e-15  +9.68265e-15
+4.06671383849472e-13 406.671e-15 +406.671e-15   406.67e-15  +406.67e-15 406.67138e-15 +406.67138e-15 00406.67e-15 +0406.67e-15 406.67138e-15 +406.67138e-15 406.67e-15   +406.67e-15  406.67138e-15 +406.67138e-15 406.67e-15   +406.67e-15  406.67138e-15 +406.67138e-15
+1.70801981216778e-11 17.0802e-12 +17.0802e-12    17.08e-12   +17.08e-12 17.08020e-12 +17.08020e-12 00017.08e-12 +0017.08e-12 17.08020e-12 +17.08020e-12 17.08e-12    +17.08e-12   17.08020e-12 +17.08020e-12 17.08e-12    +17.08e-12   17.08020e-12 +17.08020e-12
+7.17368321110469e-10 717.368e-12 +717.368e-12   717.37e-12  +717.37e-12 717.36832e-12 +717.36832e-12 00717.37e-12 +0717.37e-12 717.36832e-12 +717.36832e-12 717.37e-12   +717.37e-12  717.36832e-12 +717.36832e-12 717.37e-12   +717.37e-12  717.36832e-12 +717.36832e-12
+3.01294694866397e-08 30.1295e-9 +30.1295e-9    30.129e-9   +30.129e-9  30.12947e-9 +30.12947e-9 00030.129e-9 +0030.129e-9 030.12947e-9 +30.12947e-9 30.129e-9    +30.129e-9   30.12947e-9  +30.12947e-9 30.129e-9    +30.129e-9   30.12947e-9  +30.12947e-9
+1.26543771843887e-06 1.26544e-6 +1.26544e-6    1.2654e-6   +1.2654e-6   1.26544e-6  +1.26544e-6 0001.2654e-6 +001.2654e-6 001.26544e-6 +01.26544e-6 1.2654e-6    +1.2654e-6   1.26544e-6   +1.26544e-6  1.2654e-6    +1.2654e-6   1.26544e-6   +1.26544e-6 
+5.31483841744324e-05 53.1484e-6 +53.1484e-6    53.148e-6   +53.148e-6  53.14838e-6 +53.14838e-6 00053.148e-6 +0053.148e-6 053.14838e-6 +53.14838e-6 53.148e-6    +53.148e-6   53.14838e-6  +53.14838e-6 53.148e-6    +53.148e-6   53.14838e-6  +53.14838e-6
+0.00223223213532616 2.23223e-3 +2.23223e-3    2.2322e-3   +2.2322e-3   2.23223e-3  +2.23223e-3 0002.2322e-3 +002.2322e-3 002.23223e-3 +02.23223e-3 2.2322e-3    +2.2322e-3   2.23223e-3   +2.23223e-3  2.2322e-3    +2.2322e-3   2.23223e-3   +2.23223e-3 
+0.0937537496836987 93.7537e-3 +93.7537e-3    93.754e-3   +93.754e-3  93.75375e-3 +93.75375e-3 00093.754e-3 +0093.754e-3 093.75375e-3 +93.75375e-3 93.754e-3    +93.754e-3   93.75375e-3  +93.75375e-3 93.754e-3    +93.754e-3   93.75375e-3  +93.75375e-3
+3.93765748671535 3.93766e0 +3.93766e0     3.9377e0    +3.9377e0    3.93766e0   +3.93766e0 00003.9377e0 +0003.9377e0 0003.93766e0 +003.93766e0 3.9377e0     +3.9377e0    3.93766e0    +3.93766e0   3.9377e0     +3.9377e0    3.93766e0    +3.93766e0  
+165.381614442045 165.382e0 +165.382e0     165.38e0    +165.38e0  165.38161e0 +165.38161e0 0000165.38e0 +000165.38e0 0165.38161e0 +165.38161e0 165.38e0     +165.38e0    165.38161e0  +165.38161e0 165.38e0     +165.38e0    165.38161e0  +165.38161e0
+6946.02780656587 6.94603e3 +6.94603e3      6.946e3     +6.946e3    6.94603e3   +6.94603e3 000006.946e3 +00006.946e3 0006.94603e3 +006.94603e3 6.946e3      +6.946e3     6.94603e3    +6.94603e3   6.946e3      +6.946e3     6.94603e3    +6.94603e3  
+291733.167875767 291.733e3 +291.733e3     291.73e3    +291.73e3  291.73317e3 +291.73317e3 0000291.73e3 +000291.73e3 0291.73317e3 +291.73317e3 291.73e3     +291.73e3    291.73317e3  +291.73317e3 291.73e3     +291.73e3    291.73317e3  +291.73317e3
+12252793.0507822 12.2528e6 +12.2528e6     12.253e6    +12.253e6   12.25279e6  +12.25279e6 000012.253e6 +00012.253e6 0012.25279e6 +012.25279e6 12.253e6     +12.253e6    12.25279e6   +12.25279e6  12.253e6     +12.253e6    12.25279e6   +12.25279e6 
+514617308.132852 514.617e6 +514.617e6     514.62e6    +514.62e6  514.61731e6 +514.61731e6 0000514.62e6 +000514.62e6 0514.61731e6 +514.61731e6 514.62e6     +514.62e6    514.61731e6  +514.61731e6 514.62e6     +514.62e6    514.61731e6  +514.61731e6
+21613926941.5798 21.6139e9 +21.6139e9     21.614e9    +21.614e9   21.61393e9  +21.61393e9 000021.614e9 +00021.614e9 0021.61393e9 +021.61393e9 21.614e9     +21.614e9    21.61393e9   +21.61393e9  21.614e9     +21.614e9    21.61393e9   +21.61393e9 
+907784931546.352 907.785e9 +907.785e9     907.78e9    +907.78e9  907.78493e9 +907.78493e9 0000907.78e9 +000907.78e9 0907.78493e9 +907.78493e9 907.78e9     +907.78e9    907.78493e9  +907.78493e9 907.78e9     +907.78e9    907.78493e9  +907.78493e9
+38126967124946.8 38.127e12 +38.127e12    38.127e12   +38.127e12  38.12697e12 +38.12697e12 00038.127e12 +0038.127e12 038.12697e12 +38.12697e12 38.127e12    +38.127e12   38.12697e12  +38.12697e12 38.127e12    +38.127e12   38.12697e12  +38.12697e12
+1.60133261924776e+15 1.60133e15 +1.60133e15    1.6013e15   +1.6013e15   1.60133e15  +1.60133e15 0001.6013e15 +001.6013e15 001.60133e15 +01.60133e15 1.6013e15    +1.6013e15   1.60133e15   +1.60133e15  1.6013e15    +1.6013e15   1.60133e15   +1.60133e15 
+6.72559700084061e+16 67.256e15 +67.256e15    67.256e15   +67.256e15  67.25597e15 +67.25597e15 00067.256e15 +0067.256e15 067.25597e15 +67.25597e15 67.256e15    +67.256e15   67.25597e15  +67.25597e15 67.256e15    +67.256e15   67.25597e15  +67.25597e15
+2.82475074035306e+18 2.82475e18 +2.82475e18    2.8248e18   +2.8248e18   2.82475e18  +2.82475e18 0002.8248e18 +002.8248e18 002.82475e18 +02.82475e18 2.8248e18    +2.8248e18   2.82475e18   +2.82475e18  2.8248e18    +2.8248e18   2.82475e18   +2.82475e18 
+1.18639531094828e+20 118.64e18 +118.64e18    118.64e18   +118.64e18 118.63953e18 +118.63953e18 000118.64e18 +00118.64e18 118.63953e18 +118.63953e18 118.64e18    +118.64e18   118.63953e18 +118.63953e18 118.64e18    +118.64e18   118.63953e18 +118.63953e18
+4.98286030598279e+21 4.98286e21 +4.98286e21    4.9829e21   +4.9829e21   4.98286e21  +4.98286e21 0004.9829e21 +004.9829e21 004.98286e21 +04.98286e21 4.9829e21    +4.9829e21   4.98286e21   +4.98286e21  4.9829e21    +4.9829e21   4.98286e21   +4.98286e21 
+2.09280132851277e+23 209.28e21 +209.28e21    209.28e21   +209.28e21 209.28013e21 +209.28013e21 000209.28e21 +00209.28e21 209.28013e21 +209.28013e21 209.28e21    +209.28e21   209.28013e21 +209.28013e21 209.28e21    +209.28e21   209.28013e21 +209.28013e21
+8.78976557975365e+24 8.78977e24 +8.78977e24    8.7898e24   +8.7898e24   8.78977e24  +8.78977e24 0008.7898e24 +008.7898e24 008.78977e24 +08.78977e24 8.7898e24    +8.7898e24   8.78977e24   +8.78977e24  8.7898e24    +8.7898e24   8.78977e24   +8.78977e24 
+3.69170154349653e+26 369.17e24 +369.17e24    369.17e24   +369.17e24 369.17015e24 +369.17015e24 000369.17e24 +00369.17e24 369.17015e24 +369.17015e24 369.17e24    +369.17e24   369.17015e24 +369.17015e24 369.17e24    +369.17e24   369.17015e24 +369.17015e24
+1.55051464826854e+28 15.5051e27 +15.5051e27    15.505e27   +15.505e27  15.50515e27 +15.50515e27 00015.505e27 +0015.505e27 015.50515e27 +15.50515e27 15.505e27    +15.505e27   15.50515e27  +15.50515e27 15.505e27    +15.505e27   15.50515e27  +15.50515e27
+6.51216152272788e+29 651.216e27 +651.216e27    651.22e27   +651.22e27 651.21615e27 +651.21615e27 000651.22e27 +00651.22e27 651.21615e27 +651.21615e27 651.22e27    +651.22e27   651.21615e27 +651.21615e27 651.22e27    +651.22e27   651.21615e27 +651.21615e27
+
+1e-27 1e-27 +1e-27        1e-27       +1e-27  1.00000e-27 +1.00000e-27 00000001e-27 +0000001e-27 01.00000e-27 +1.00000e-27 1e-27        +1e-27       1.00000e-27  +1.00000e-27 1e-27        +1e-27       1.00000e-27  +1.00000e-27
+1e-26 10e-27 +10e-27       10e-27      +10e-27 10.00000e-27 +10.00000e-27 00000010e-27 +0000010e-27 10.00000e-27 +10.00000e-27 10e-27       +10e-27      10.00000e-27 +10.00000e-27 10e-27       +10e-27      10.00000e-27 +10.00000e-27
+1e-25 100e-27 +100e-27      100e-27     +100e-27 100.00000e-27 +100.00000e-27 00000100e-27 +0000100e-27 100.00000e-27 +100.00000e-27 100e-27      +100e-27     100.00000e-27 +100.00000e-27 100e-27      +100e-27     100.00000e-27 +100.00000e-27
+1e-24 1y +1y        1y       +1y  1.00000y +1.00000y 00000001y +0000001y 01.00000y +1.00000y 1y           +1y          1.00000y     +1.00000y    1y           +1y          1.00000y     +1.00000y   
+1e-23 10y +10y       10y      +10y 10.00000y +10.00000y 00000010y +0000010y 10.00000y +10.00000y 10y          +10y         10.00000y    +10.00000y   10y          +10y         10.00000y    +10.00000y  
+1e-22 100y +100y      100y     +100y 100.00000y +100.00000y 00000100y +0000100y 100.00000y +100.00000y 100y         +100y        100.00000y   +100.00000y  100y         +100y        100.00000y   +100.00000y 
+1e-21 1z +1z        1z       +1z  1.00000z +1.00000z 00000001z +0000001z 01.00000z +1.00000z 1z           +1z          1.00000z     +1.00000z    1z           +1z          1.00000z     +1.00000z   
+1e-20 10z +10z       10z      +10z 10.00000z +10.00000z 00000010z +0000010z 10.00000z +10.00000z 10z          +10z         10.00000z    +10.00000z   10z          +10z         10.00000z    +10.00000z  
+1e-19 100z +100z      100z     +100z 100.00000z +100.00000z 00000100z +0000100z 100.00000z +100.00000z 100z         +100z        100.00000z   +100.00000z  100z         +100z        100.00000z   +100.00000z 
+1e-18 1a +1a        1a       +1a  1.00000a +1.00000a 00000001a +0000001a 01.00000a +1.00000a 1a           +1a          1.00000a     +1.00000a    1a           +1a          1.00000a     +1.00000a   
+1e-17 10a +10a       10a      +10a 10.00000a +10.00000a 00000010a +0000010a 10.00000a +10.00000a 10a          +10a         10.00000a    +10.00000a   10a          +10a         10.00000a    +10.00000a  
+1e-16 100a +100a      100a     +100a 100.00000a +100.00000a 00000100a +0000100a 100.00000a +100.00000a 100a         +100a        100.00000a   +100.00000a  100a         +100a        100.00000a   +100.00000a 
+1e-15 1f +1f        1f       +1f  1.00000f +1.00000f 00000001f +0000001f 01.00000f +1.00000f 1f           +1f          1.00000f     +1.00000f    1f           +1f          1.00000f     +1.00000f   
+1e-14 10f +10f       10f      +10f 10.00000f +10.00000f 00000010f +0000010f 10.00000f +10.00000f 10f          +10f         10.00000f    +10.00000f   10f          +10f         10.00000f    +10.00000f  
+1e-13 100f +100f      100f     +100f 100.00000f +100.00000f 00000100f +0000100f 100.00000f +100.00000f 100f         +100f        100.00000f   +100.00000f  100f         +100f        100.00000f   +100.00000f 
+1e-12 1p +1p        1p       +1p  1.00000p +1.00000p 00000001p +0000001p 01.00000p +1.00000p 1p           +1p          1.00000p     +1.00000p    1p           +1p          1.00000p     +1.00000p   
+1e-11 10p +10p       10p      +10p 10.00000p +10.00000p 00000010p +0000010p 10.00000p +10.00000p 10p          +10p         10.00000p    +10.00000p   10p          +10p         10.00000p    +10.00000p  
+1e-10 100p +100p      100p     +100p 100.00000p +100.00000p 00000100p +0000100p 100.00000p +100.00000p 100p         +100p        100.00000p   +100.00000p  100p         +100p        100.00000p   +100.00000p 
+1e-09 1n +1n         1n        +1n   1.00000n  +1.00000n 000000001n +00000001n 001.00000n +01.00000n 1n           +1n          1.00000n     +1.00000n    1n           +1n          1.00000n     +1.00000n   
+1e-08 10n +10n        10n       +10n  10.00000n +10.00000n 000000010n +00000010n 010.00000n +10.00000n 10n          +10n         10.00000n    +10.00000n   10n          +10n         10.00000n    +10.00000n  
+1e-07 100n +100n       100n      +100n 100.00000n +100.00000n 000000100n +00000100n 100.00000n +100.00000n 100n         +100n        100.00000n   +100.00000n  100n         +100n        100.00000n   +100.00000n 
+1e-06 1u +1u         1u        +1u   1.00000u  +1.00000u 000000001u +00000001u 001.00000u +01.00000u 1u           +1u          1.00000u     +1.00000u    1u           +1u          1.00000u     +1.00000u   
+1e-05 10u +10u        10u       +10u  10.00000u +10.00000u 000000010u +00000010u 010.00000u +10.00000u 10u          +10u         10.00000u    +10.00000u   10u          +10u         10.00000u    +10.00000u  
+0.0001 100u +100u       100u      +100u 100.00000u +100.00000u 000000100u +00000100u 100.00000u +100.00000u 100u         +100u        100.00000u   +100.00000u  100u         +100u        100.00000u   +100.00000u 
+0.001 1m +1m         1m        +1m   1.00000m  +1.00000m 000000001m +00000001m 001.00000m +01.00000m 1m           +1m          1.00000m     +1.00000m    1m           +1m          1.00000m     +1.00000m   
+0.01 10m +10m        10m       +10m  10.00000m +10.00000m 000000010m +00000010m 010.00000m +10.00000m 10m          +10m         10.00000m    +10.00000m   10m          +10m         10.00000m    +10.00000m  
+0.1 100m +100m       100m      +100m 100.00000m +100.00000m 000000100m +00000100m 100.00000m +100.00000m 100m         +100m        100.00000m   +100.00000m  100m         +100m        100.00000m   +100.00000m 
+1. 1 +1          1         +1    1.00000   +1.00000 0000000001 +000000001 0001.00000 +001.00000 1            +1           1.00000      +1.00000     1            +1           1.00000      +1.00000    
+10. 10 +10         10        +10   10.00000  +10.00000 0000000010 +000000010 0010.00000 +010.00000 10           +10          10.00000     +10.00000    10           +10          10.00000     +10.00000   
+100. 100 +100        100       +100  100.00000 +100.00000 0000000100 +000000100 0100.00000 +100.00000 100          +100         100.00000    +100.00000   100          +100         100.00000    +100.00000  
+1000. 1K +1K          1K         +1K    1.00000K   +1.00000K 0000000001K +000000001K 0001.00000K +001.00000K 1K           +1K          1.00000K     +1.00000K    1K           +1K          1.00000K     +1.00000K   
+10000. 10K +10K         10K        +10K   10.00000K  +10.00000K 0000000010K +000000010K 0010.00000K +010.00000K 10K          +10K         10.00000K    +10.00000K   10K          +10K         10.00000K    +10.00000K  
+100000. 100K +100K        100K       +100K  100.00000K +100.00000K 0000000100K +000000100K 0100.00000K +100.00000K 100K         +100K        100.00000K   +100.00000K  100K         +100K        100.00000K   +100.00000K 
+1000000. 1M +1M          1M         +1M    1.00000M   +1.00000M 0000000001M +000000001M 0001.00000M +001.00000M 1M           +1M          1.00000M     +1.00000M    1M           +1M          1.00000M     +1.00000M   
+10000000. 10M +10M         10M        +10M   10.00000M  +10.00000M 0000000010M +000000010M 0010.00000M +010.00000M 10M          +10M         10.00000M    +10.00000M   10M          +10M         10.00000M    +10.00000M  
+100000000. 100M +100M        100M       +100M  100.00000M +100.00000M 0000000100M +000000100M 0100.00000M +100.00000M 100M         +100M        100.00000M   +100.00000M  100M         +100M        100.00000M   +100.00000M 
+1000000000. 1G +1G          1G         +1G    1.00000G   +1.00000G 0000000001G +000000001G 0001.00000G +001.00000G 1G           +1G          1.00000G     +1.00000G    1G           +1G          1.00000G     +1.00000G   
+10000000000. 10G +10G         10G        +10G   10.00000G  +10.00000G 0000000010G +000000010G 0010.00000G +010.00000G 10G          +10G         10.00000G    +10.00000G   10G          +10G         10.00000G    +10.00000G  
+100000000000. 100G +100G        100G       +100G  100.00000G +100.00000G 0000000100G +000000100G 0100.00000G +100.00000G 100G         +100G        100.00000G   +100.00000G  100G         +100G        100.00000G   +100.00000G 
+1000000000000. 1T +1T         1T        +1T   1.00000T  +1.00000T 000000001T +00000001T 001.00000T +01.00000T 1T           +1T          1.00000T     +1.00000T    1T           +1T          1.00000T     +1.00000T   
+10000000000000. 10T +10T        10T       +10T  10.00000T +10.00000T 000000010T +00000010T 010.00000T +10.00000T 10T          +10T         10.00000T    +10.00000T   10T          +10T         10.00000T    +10.00000T  
+100000000000000. 100T +100T       100T      +100T 100.00000T +100.00000T 000000100T +00000100T 100.00000T +100.00000T 100T         +100T        100.00000T   +100.00000T  100T         +100T        100.00000T   +100.00000T 
+1e+15 1P +1P         1P        +1P   1.00000P  +1.00000P 000000001P +00000001P 001.00000P +01.00000P 1P           +1P          1.00000P     +1.00000P    1P           +1P          1.00000P     +1.00000P   
+1e+16 10P +10P        10P       +10P  10.00000P +10.00000P 000000010P +00000010P 010.00000P +10.00000P 10P          +10P         10.00000P    +10.00000P   10P          +10P         10.00000P    +10.00000P  
+1e+17 100P +100P       100P      +100P 100.00000P +100.00000P 000000100P +00000100P 100.00000P +100.00000P 100P         +100P        100.00000P   +100.00000P  100P         +100P        100.00000P   +100.00000P 
+1e+18 1E +1E         1E        +1E   1.00000E  +1.00000E 000000001E +00000001E 001.00000E +01.00000E 1E           +1E          1.00000E     +1.00000E    1E           +1E          1.00000E     +1.00000E   
+1e+19 10E +10E        10E       +10E  10.00000E +10.00000E 000000010E +00000010E 010.00000E +10.00000E 10E          +10E         10.00000E    +10.00000E   10E          +10E         10.00000E    +10.00000E  
+1e+20 100E +100E       100E      +100E 100.00000E +100.00000E 000000100E +00000100E 100.00000E +100.00000E 100E         +100E        100.00000E   +100.00000E  100E         +100E        100.00000E   +100.00000E 
+1e+21 1Z +1Z         1Z        +1Z   1.00000Z  +1.00000Z 000000001Z +00000001Z 001.00000Z +01.00000Z 1Z           +1Z          1.00000Z     +1.00000Z    1Z           +1Z          1.00000Z     +1.00000Z   
+1e+22 10Z +10Z        10Z       +10Z  10.00000Z +10.00000Z 000000010Z +00000010Z 010.00000Z +10.00000Z 10Z          +10Z         10.00000Z    +10.00000Z   10Z          +10Z         10.00000Z    +10.00000Z  
+1e+23 100Z +100Z       100Z      +100Z 100.00000Z +100.00000Z 000000100Z +00000100Z 100.00000Z +100.00000Z 100Z         +100Z        100.00000Z   +100.00000Z  100Z         +100Z        100.00000Z   +100.00000Z 
+1e+24 1Y +1Y         1Y        +1Y   1.00000Y  +1.00000Y 000000001Y +00000001Y 001.00000Y +01.00000Y 1Y           +1Y          1.00000Y     +1.00000Y    1Y           +1Y          1.00000Y     +1.00000Y   
+1e+25 10Y +10Y        10Y       +10Y  10.00000Y +10.00000Y 000000010Y +00000010Y 010.00000Y +10.00000Y 10Y          +10Y         10.00000Y    +10.00000Y   10Y          +10Y         10.00000Y    +10.00000Y  
+1e+26 100Y +100Y       100Y      +100Y 100.00000Y +100.00000Y 000000100Y +00000100Y 100.00000Y +100.00000Y 100Y         +100Y        100.00000Y   +100.00000Y  100Y         +100Y        100.00000Y   +100.00000Y 
+1e+27 1e27 +1e27         1e27        +1e27   1.00000e27  +1.00000e27 000000001e27 +00000001e27 001.00000e27 +01.00000e27 1e27         +1e27        1.00000e27   +1.00000e27  1e27         +1e27        1.00000e27   +1.00000e27 
+1e+28 10e27 +10e27        10e27       +10e27  10.00000e27 +10.00000e27 000000010e27 +00000010e27 010.00000e27 +10.00000e27 10e27        +10e27       10.00000e27  +10.00000e27 10e27        +10e27       10.00000e27  +10.00000e27
+1e+29 100e27 +100e27       100e27      +100e27 100.00000e27 +100.00000e27 000000100e27 +00000100e27 100.00000e27 +100.00000e27 100e27       +100e27      100.00000e27 +100.00000e27 100e27       +100e27      100.00000e27 +100.00000e27
+
+1e-27 1e-27 +1e-27        1e-27       +1e-27  1.00000e-27 +1.00000e-27 00000001e-27 +0000001e-27 01.00000e-27 +1.00000e-27 1e-27        +1e-27       1.00000e-27  +1.00000e-27 1e-27        +1e-27       1.00000e-27  +1.00000e-27
+4.2e-26 42e-27 +42e-27       42e-27      +42e-27 42.00000e-27 +42.00000e-27 00000042e-27 +0000042e-27 42.00000e-27 +42.00000e-27 42e-27       +42e-27      42.00000e-27 +42.00000e-27 42e-27       +42e-27      42.00000e-27 +42.00000e-27
+1.764e-24 1.764y +1.764y    1.764y   +1.764y  1.76400y +1.76400y 0001.764y +001.764y 01.76400y +1.76400y 1.764y       +1.764y      1.76400y     +1.76400y    1.764y       +1.764y      1.76400y     +1.76400y   
+7.4088e-23 74.088y +74.088y   74.088y  +74.088y 74.08800y +74.08800y 0074.088y +074.088y 74.08800y +74.08800y 74.088y      +74.088y     74.08800y    +74.08800y   74.088y      +74.088y     74.08800y    +74.08800y  
+3.111696e-21 3.1117z +3.1117z   3.1117z  +3.1117z  3.11170z +3.11170z 003.1117z +03.1117z 03.11170z +3.11170z 3.1117z      +3.1117z     3.11170z     +3.11170z    3.1117z      +3.1117z     3.11170z     +3.11170z   
+1.30691232e-19 130.691z +130.691z   130.69z  +130.69z 130.69123z +130.69123z 00130.69z +0130.69z 130.69123z +130.69123z 130.69z      +130.69z     130.69123z   +130.69123z  130.69z      +130.69z     130.69123z   +130.69123z 
+5.489031744e-18 5.48903a +5.48903a    5.489a   +5.489a  5.48903a +5.48903a 0005.489a +005.489a 05.48903a +5.48903a 5.489a       +5.489a      5.48903a     +5.48903a    5.489a       +5.489a      5.48903a     +5.48903a   
+2.30539333248e-16 230.539a +230.539a   230.54a  +230.54a 230.53933a +230.53933a 00230.54a +0230.54a 230.53933a +230.53933a 230.54a      +230.54a     230.53933a   +230.53933a  230.54a      +230.54a     230.53933a   +230.53933a 
+9.682651996416e-15 9.68265f +9.68265f   9.6827f  +9.6827f  9.68265f +9.68265f 009.6827f +09.6827f 09.68265f +9.68265f 9.6827f      +9.6827f     9.68265f     +9.68265f    9.6827f      +9.6827f     9.68265f     +9.68265f   
+4.06671383849472e-13 406.671f +406.671f   406.67f  +406.67f 406.67138f +406.67138f 00406.67f +0406.67f 406.67138f +406.67138f 406.67f      +406.67f     406.67138f   +406.67138f  406.67f      +406.67f     406.67138f   +406.67138f 
+1.70801981216778e-11 17.0802p +17.0802p    17.08p   +17.08p 17.08020p +17.08020p 00017.08p +0017.08p 17.08020p +17.08020p 17.08p       +17.08p      17.08020p    +17.08020p   17.08p       +17.08p      17.08020p    +17.08020p  
+7.17368321110469e-10 717.368p +717.368p   717.37p  +717.37p 717.36832p +717.36832p 00717.37p +0717.37p 717.36832p +717.36832p 717.37p      +717.37p     717.36832p   +717.36832p  717.37p      +717.37p     717.36832p   +717.36832p 
+3.01294694866397e-08 30.1295n +30.1295n    30.129n   +30.129n  30.12947n +30.12947n 00030.129n +0030.129n 030.12947n +30.12947n 30.129n      +30.129n     30.12947n    +30.12947n   30.129n      +30.129n     30.12947n    +30.12947n  
+1.26543771843887e-06 1.26544u +1.26544u    1.2654u   +1.2654u   1.26544u  +1.26544u 0001.2654u +001.2654u 001.26544u +01.26544u 1.2654u      +1.2654u     1.26544u     +1.26544u    1.2654u      +1.2654u     1.26544u     +1.26544u   
+5.31483841744324e-05 53.1484u +53.1484u    53.148u   +53.148u  53.14838u +53.14838u 00053.148u +0053.148u 053.14838u +53.14838u 53.148u      +53.148u     53.14838u    +53.14838u   53.148u      +53.148u     53.14838u    +53.14838u  
+0.00223223213532616 2.23223m +2.23223m    2.2322m   +2.2322m   2.23223m  +2.23223m 0002.2322m +002.2322m 002.23223m +02.23223m 2.2322m      +2.2322m     2.23223m     +2.23223m    2.2322m      +2.2322m     2.23223m     +2.23223m   
+0.0937537496836987 93.7537m +93.7537m    93.754m   +93.754m  93.75375m +93.75375m 00093.754m +0093.754m 093.75375m +93.75375m 93.754m      +93.754m     93.75375m    +93.75375m   93.754m      +93.754m     93.75375m    +93.75375m  
+3.93765748671535 3.93766 +3.93766     3.9377    +3.9377    3.93766   +3.93766 00003.9377 +0003.9377 0003.93766 +003.93766 3.9377       +3.9377      3.93766      +3.93766     3.9377       +3.9377      3.93766      +3.93766    
+165.381614442045 165.382 +165.382     165.38    +165.38  165.38161 +165.38161 0000165.38 +000165.38 0165.38161 +165.38161 165.38       +165.38      165.38161    +165.38161   165.38       +165.38      165.38161    +165.38161  
+6946.02780656587 6.94603K +6.94603K      6.946K     +6.946K    6.94603K   +6.94603K 000006.946K +00006.946K 0006.94603K +006.94603K 6.946K       +6.946K      6.94603K     +6.94603K    6.946K       +6.946K      6.94603K     +6.94603K   
+291733.167875767 291.733K +291.733K     291.73K    +291.73K  291.73317K +291.73317K 0000291.73K +000291.73K 0291.73317K +291.73317K 291.73K      +291.73K     291.73317K   +291.73317K  291.73K      +291.73K     291.73317K   +291.73317K 
+12252793.0507822 12.2528M +12.2528M     12.253M    +12.253M   12.25279M  +12.25279M 000012.253M +00012.253M 0012.25279M +012.25279M 12.253M      +12.253M     12.25279M    +12.25279M   12.253M      +12.253M     12.25279M    +12.25279M  
+514617308.132852 514.617M +514.617M     514.62M    +514.62M  514.61731M +514.61731M 0000514.62M +000514.62M 0514.61731M +514.61731M 514.62M      +514.62M     514.61731M   +514.61731M  514.62M      +514.62M     514.61731M   +514.61731M 
+21613926941.5798 21.6139G +21.6139G     21.614G    +21.614G   21.61393G  +21.61393G 000021.614G +00021.614G 0021.61393G +021.61393G 21.614G      +21.614G     21.61393G    +21.61393G   21.614G      +21.614G     21.61393G    +21.61393G  
+907784931546.352 907.785G +907.785G     907.78G    +907.78G  907.78493G +907.78493G 0000907.78G +000907.78G 0907.78493G +907.78493G 907.78G      +907.78G     907.78493G   +907.78493G  907.78G      +907.78G     907.78493G   +907.78493G 
+38126967124946.8 38.127T +38.127T    38.127T   +38.127T  38.12697T +38.12697T 00038.127T +0038.127T 038.12697T +38.12697T 38.127T      +38.127T     38.12697T    +38.12697T   38.127T      +38.127T     38.12697T    +38.12697T  
+1.60133261924776e+15 1.60133P +1.60133P    1.6013P   +1.6013P   1.60133P  +1.60133P 0001.6013P +001.6013P 001.60133P +01.60133P 1.6013P      +1.6013P     1.60133P     +1.60133P    1.6013P      +1.6013P     1.60133P     +1.60133P   
+6.72559700084061e+16 67.256P +67.256P    67.256P   +67.256P  67.25597P +67.25597P 00067.256P +0067.256P 067.25597P +67.25597P 67.256P      +67.256P     67.25597P    +67.25597P   67.256P      +67.256P     67.25597P    +67.25597P  
+2.82475074035306e+18 2.82475E +2.82475E    2.8248E   +2.8248E   2.82475E  +2.82475E 0002.8248E +002.8248E 002.82475E +02.82475E 2.8248E      +2.8248E     2.82475E     +2.82475E    2.8248E      +2.8248E     2.82475E     +2.82475E   
+1.18639531094828e+20 118.64E +118.64E    118.64E   +118.64E 118.63953E +118.63953E 000118.64E +00118.64E 118.63953E +118.63953E 118.64E      +118.64E     118.63953E   +118.63953E  118.64E      +118.64E     118.63953E   +118.63953E 
+4.98286030598279e+21 4.98286Z +4.98286Z    4.9829Z   +4.9829Z   4.98286Z  +4.98286Z 0004.9829Z +004.9829Z 004.98286Z +04.98286Z 4.9829Z      +4.9829Z     4.98286Z     +4.98286Z    4.9829Z      +4.9829Z     4.98286Z     +4.98286Z   
+2.09280132851277e+23 209.28Z +209.28Z    209.28Z   +209.28Z 209.28013Z +209.28013Z 000209.28Z +00209.28Z 209.28013Z +209.28013Z 209.28Z      +209.28Z     209.28013Z   +209.28013Z  209.28Z      +209.28Z     209.28013Z   +209.28013Z 
+8.78976557975365e+24 8.78977Y +8.78977Y    8.7898Y   +8.7898Y   8.78977Y  +8.78977Y 0008.7898Y +008.7898Y 008.78977Y +08.78977Y 8.7898Y      +8.7898Y     8.78977Y     +8.78977Y    8.7898Y      +8.7898Y     8.78977Y     +8.78977Y   
+3.69170154349653e+26 369.17Y +369.17Y    369.17Y   +369.17Y 369.17015Y +369.17015Y 000369.17Y +00369.17Y 369.17015Y +369.17015Y 369.17Y      +369.17Y     369.17015Y   +369.17015Y  369.17Y      +369.17Y     369.17015Y   +369.17015Y 
+1.55051464826854e+28 15.5051e27 +15.5051e27    15.505e27   +15.505e27  15.50515e27 +15.50515e27 00015.505e27 +0015.505e27 015.50515e27 +15.50515e27 15.505e27    +15.505e27   15.50515e27  +15.50515e27 15.505e27    +15.505e27   15.50515e27  +15.50515e27
+6.51216152272788e+29 651.216e27 +651.216e27    651.22e27   +651.22e27 651.21615e27 +651.21615e27 000651.22e27 +00651.22e27 651.21615e27 +651.21615e27 651.22e27    +651.22e27   651.21615e27 +651.21615e27 651.22e27    +651.22e27   651.21615e27 +651.21615e27
+
+-1e-27 -1e-27 -1e-27       -1e-27       -1e-27 -1.00000e-27 -1.00000e-27 -0000001e-27 -0000001e-27 -1.00000e-27 -1.00000e-27 -1e-27       -1e-27       -1.00000e-27 -1.00000e-27 -1e-27       -1e-27       -1.00000e-27 -1.00000e-27
+-4.2e-26 -42e-27 -42e-27      -42e-27      -42e-27 -42.00000e-27 -42.00000e-27 -0000042e-27 -0000042e-27 -42.00000e-27 -42.00000e-27 -42e-27      -42e-27      -42.00000e-27 -42.00000e-27 -42e-27      -42e-27      -42.00000e-27 -42.00000e-27
+-1.764e-24 -1.764e-24 -1.764e-24   -1.764e-24   -1.764e-24 -1.76400e-24 -1.76400e-24 -001.764e-24 -001.764e-24 -1.76400e-24 -1.76400e-24 -1.764e-24   -1.764e-24   -1.76400e-24 -1.76400e-24 -1.764e-24   -1.764e-24   -1.76400e-24 -1.76400e-24
+-7.4088e-23 -74.088e-24 -74.088e-24  -74.088e-24  -74.088e-24 -74.08800e-24 -74.08800e-24 -074.088e-24 -074.088e-24 -74.08800e-24 -74.08800e-24 -74.088e-24  -74.088e-24  -74.08800e-24 -74.08800e-24 -74.088e-24  -74.088e-24  -74.08800e-24 -74.08800e-24
+-3.111696e-21 -3.1117e-21 -3.1117e-21  -3.1117e-21  -3.1117e-21 -3.11170e-21 -3.11170e-21 -03.1117e-21 -03.1117e-21 -3.11170e-21 -3.11170e-21 -3.1117e-21  -3.1117e-21  -3.11170e-21 -3.11170e-21 -3.1117e-21  -3.1117e-21  -3.11170e-21 -3.11170e-21
+-1.30691232e-19 -130.691e-21 -130.691e-21  -130.69e-21  -130.69e-21 -130.69123e-21 -130.69123e-21 -0130.69e-21 -0130.69e-21 -130.69123e-21 -130.69123e-21 -130.69e-21  -130.69e-21  -130.69123e-21 -130.69123e-21 -130.69e-21  -130.69e-21  -130.69123e-21 -130.69123e-21
+-5.489031744e-18 -5.48903e-18 -5.48903e-18   -5.489e-18   -5.489e-18 -5.48903e-18 -5.48903e-18 -005.489e-18 -005.489e-18 -5.48903e-18 -5.48903e-18 -5.489e-18   -5.489e-18   -5.48903e-18 -5.48903e-18 -5.489e-18   -5.489e-18   -5.48903e-18 -5.48903e-18
+-2.30539333248e-16 -230.539e-18 -230.539e-18  -230.54e-18  -230.54e-18 -230.53933e-18 -230.53933e-18 -0230.54e-18 -0230.54e-18 -230.53933e-18 -230.53933e-18 -230.54e-18  -230.54e-18  -230.53933e-18 -230.53933e-18 -230.54e-18  -230.54e-18  -230.53933e-18 -230.53933e-18
+-9.682651996416e-15 -9.68265e-15 -9.68265e-15  -9.6827e-15  -9.6827e-15 -9.68265e-15 -9.68265e-15 -09.6827e-15 -09.6827e-15 -9.68265e-15 -9.68265e-15 -9.6827e-15  -9.6827e-15  -9.68265e-15 -9.68265e-15 -9.6827e-15  -9.6827e-15  -9.68265e-15 -9.68265e-15
+-4.06671383849472e-13 -406.671e-15 -406.671e-15  -406.67e-15  -406.67e-15 -406.67138e-15 -406.67138e-15 -0406.67e-15 -0406.67e-15 -406.67138e-15 -406.67138e-15 -406.67e-15  -406.67e-15  -406.67138e-15 -406.67138e-15 -406.67e-15  -406.67e-15  -406.67138e-15 -406.67138e-15
+-1.70801981216778e-11 -17.0802e-12 -17.0802e-12   -17.08e-12   -17.08e-12 -17.08020e-12 -17.08020e-12 -0017.08e-12 -0017.08e-12 -17.08020e-12 -17.08020e-12 -17.08e-12   -17.08e-12   -17.08020e-12 -17.08020e-12 -17.08e-12   -17.08e-12   -17.08020e-12 -17.08020e-12
+-7.17368321110469e-10 -717.368e-12 -717.368e-12  -717.37e-12  -717.37e-12 -717.36832e-12 -717.36832e-12 -0717.37e-12 -0717.37e-12 -717.36832e-12 -717.36832e-12 -717.37e-12  -717.37e-12  -717.36832e-12 -717.36832e-12 -717.37e-12  -717.37e-12  -717.36832e-12 -717.36832e-12
+-3.01294694866397e-08 -30.1295e-9 -30.1295e-9   -30.129e-9   -30.129e-9 -30.12947e-9 -30.12947e-9 -0030.129e-9 -0030.129e-9 -30.12947e-9 -30.12947e-9 -30.129e-9   -30.129e-9   -30.12947e-9 -30.12947e-9 -30.129e-9   -30.129e-9   -30.12947e-9 -30.12947e-9
+-1.26543771843887e-06 -1.26544e-6 -1.26544e-6   -1.2654e-6   -1.2654e-6  -1.26544e-6  -1.26544e-6 -001.2654e-6 -001.2654e-6 -01.26544e-6 -01.26544e-6 -1.2654e-6   -1.2654e-6   -1.26544e-6  -1.26544e-6  -1.2654e-6   -1.2654e-6   -1.26544e-6  -1.26544e-6 
+-5.31483841744324e-05 -53.1484e-6 -53.1484e-6   -53.148e-6   -53.148e-6 -53.14838e-6 -53.14838e-6 -0053.148e-6 -0053.148e-6 -53.14838e-6 -53.14838e-6 -53.148e-6   -53.148e-6   -53.14838e-6 -53.14838e-6 -53.148e-6   -53.148e-6   -53.14838e-6 -53.14838e-6
+-0.00223223213532616 -2.23223e-3 -2.23223e-3   -2.2322e-3   -2.2322e-3  -2.23223e-3  -2.23223e-3 -002.2322e-3 -002.2322e-3 -02.23223e-3 -02.23223e-3 -2.2322e-3   -2.2322e-3   -2.23223e-3  -2.23223e-3  -2.2322e-3   -2.2322e-3   -2.23223e-3  -2.23223e-3 
+-0.0937537496836987 -93.7537e-3 -93.7537e-3   -93.754e-3   -93.754e-3 -93.75375e-3 -93.75375e-3 -0093.754e-3 -0093.754e-3 -93.75375e-3 -93.75375e-3 -93.754e-3   -93.754e-3   -93.75375e-3 -93.75375e-3 -93.754e-3   -93.754e-3   -93.75375e-3 -93.75375e-3
+-3.93765748671535 -3.93766e0 -3.93766e0    -3.9377e0    -3.9377e0   -3.93766e0   -3.93766e0 -0003.9377e0 -0003.9377e0 -003.93766e0 -003.93766e0 -3.9377e0    -3.9377e0    -3.93766e0   -3.93766e0   -3.9377e0    -3.9377e0    -3.93766e0   -3.93766e0  
+-165.381614442045 -165.382e0 -165.382e0    -165.38e0    -165.38e0 -165.38161e0 -165.38161e0 -000165.38e0 -000165.38e0 -165.38161e0 -165.38161e0 -165.38e0    -165.38e0    -165.38161e0 -165.38161e0 -165.38e0    -165.38e0    -165.38161e0 -165.38161e0
+-6946.02780656587 -6.94603e3 -6.94603e3     -6.946e3     -6.946e3   -6.94603e3   -6.94603e3 -00006.946e3 -00006.946e3 -006.94603e3 -006.94603e3 -6.946e3     -6.946e3     -6.94603e3   -6.94603e3   -6.946e3     -6.946e3     -6.94603e3   -6.94603e3  
+-291733.167875767 -291.733e3 -291.733e3    -291.73e3    -291.73e3 -291.73317e3 -291.73317e3 -000291.73e3 -000291.73e3 -291.73317e3 -291.73317e3 -291.73e3    -291.73e3    -291.73317e3 -291.73317e3 -291.73e3    -291.73e3    -291.73317e3 -291.73317e3
+-12252793.0507822 -12.2528e6 -12.2528e6    -12.253e6    -12.253e6  -12.25279e6  -12.25279e6 -00012.253e6 -00012.253e6 -012.25279e6 -012.25279e6 -12.253e6    -12.253e6    -12.25279e6  -12.25279e6  -12.253e6    -12.253e6    -12.25279e6  -12.25279e6 
+-514617308.132852 -514.617e6 -514.617e6    -514.62e6    -514.62e6 -514.61731e6 -514.61731e6 -000514.62e6 -000514.62e6 -514.61731e6 -514.61731e6 -514.62e6    -514.62e6    -514.61731e6 -514.61731e6 -514.62e6    -514.62e6    -514.61731e6 -514.61731e6
+-21613926941.5798 -21.6139e9 -21.6139e9    -21.614e9    -21.614e9  -21.61393e9  -21.61393e9 -00021.614e9 -00021.614e9 -021.61393e9 -021.61393e9 -21.614e9    -21.614e9    -21.61393e9  -21.61393e9  -21.614e9    -21.614e9    -21.61393e9  -21.61393e9 
+-907784931546.352 -907.785e9 -907.785e9    -907.78e9    -907.78e9 -907.78493e9 -907.78493e9 -000907.78e9 -000907.78e9 -907.78493e9 -907.78493e9 -907.78e9    -907.78e9    -907.78493e9 -907.78493e9 -907.78e9    -907.78e9    -907.78493e9 -907.78493e9
+-38126967124946.8 -38.127e12 -38.127e12   -38.127e12   -38.127e12 -38.12697e12 -38.12697e12 -0038.127e12 -0038.127e12 -38.12697e12 -38.12697e12 -38.127e12   -38.127e12   -38.12697e12 -38.12697e12 -38.127e12   -38.127e12   -38.12697e12 -38.12697e12
+-1.60133261924776e+15 -1.60133e15 -1.60133e15   -1.6013e15   -1.6013e15  -1.60133e15  -1.60133e15 -001.6013e15 -001.6013e15 -01.60133e15 -01.60133e15 -1.6013e15   -1.6013e15   -1.60133e15  -1.60133e15  -1.6013e15   -1.6013e15   -1.60133e15  -1.60133e15 
+-6.72559700084061e+16 -67.256e15 -67.256e15   -67.256e15   -67.256e15 -67.25597e15 -67.25597e15 -0067.256e15 -0067.256e15 -67.25597e15 -67.25597e15 -67.256e15   -67.256e15   -67.25597e15 -67.25597e15 -67.256e15   -67.256e15   -67.25597e15 -67.25597e15
+-2.82475074035306e+18 -2.82475e18 -2.82475e18   -2.8248e18   -2.8248e18  -2.82475e18  -2.82475e18 -002.8248e18 -002.8248e18 -02.82475e18 -02.82475e18 -2.8248e18   -2.8248e18   -2.82475e18  -2.82475e18  -2.8248e18   -2.8248e18   -2.82475e18  -2.82475e18 
+-1.18639531094828e+20 -118.64e18 -118.64e18   -118.64e18   -118.64e18 -118.63953e18 -118.63953e18 -00118.64e18 -00118.64e18 -118.63953e18 -118.63953e18 -118.64e18   -118.64e18   -118.63953e18 -118.63953e18 -118.64e18   -118.64e18   -118.63953e18 -118.63953e18
+-4.98286030598279e+21 -4.98286e21 -4.98286e21   -4.9829e21   -4.9829e21  -4.98286e21  -4.98286e21 -004.9829e21 -004.9829e21 -04.98286e21 -04.98286e21 -4.9829e21   -4.9829e21   -4.98286e21  -4.98286e21  -4.9829e21   -4.9829e21   -4.98286e21  -4.98286e21 
+-2.09280132851277e+23 -209.28e21 -209.28e21   -209.28e21   -209.28e21 -209.28013e21 -209.28013e21 -00209.28e21 -00209.28e21 -209.28013e21 -209.28013e21 -209.28e21   -209.28e21   -209.28013e21 -209.28013e21 -209.28e21   -209.28e21   -209.28013e21 -209.28013e21
+-8.78976557975365e+24 -8.78977e24 -8.78977e24   -8.7898e24   -8.7898e24  -8.78977e24  -8.78977e24 -008.7898e24 -008.7898e24 -08.78977e24 -08.78977e24 -8.7898e24   -8.7898e24   -8.78977e24  -8.78977e24  -8.7898e24   -8.7898e24   -8.78977e24  -8.78977e24 
+-3.69170154349653e+26 -369.17e24 -369.17e24   -369.17e24   -369.17e24 -369.17015e24 -369.17015e24 -00369.17e24 -00369.17e24 -369.17015e24 -369.17015e24 -369.17e24   -369.17e24   -369.17015e24 -369.17015e24 -369.17e24   -369.17e24   -369.17015e24 -369.17015e24
+-1.55051464826854e+28 -15.5051e27 -15.5051e27   -15.505e27   -15.505e27 -15.50515e27 -15.50515e27 -0015.505e27 -0015.505e27 -15.50515e27 -15.50515e27 -15.505e27   -15.505e27   -15.50515e27 -15.50515e27 -15.505e27   -15.505e27   -15.50515e27 -15.50515e27
+-6.51216152272788e+29 -651.216e27 -651.216e27   -651.22e27   -651.22e27 -651.21615e27 -651.21615e27 -00651.22e27 -00651.22e27 -651.21615e27 -651.21615e27 -651.22e27   -651.22e27   -651.21615e27 -651.21615e27 -651.22e27   -651.22e27   -651.21615e27 -651.21615e27
Index: tests/io/manipulatorsOutput1.cfa
===================================================================
--- tests/io/manipulatorsOutput1.cfa	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/io/manipulatorsOutput1.cfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -7,6 +7,6 @@
 // Created On       : Sat Jun  8 18:04:11 2019
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri May  1 11:51:44 2020
-// Update Count     : 9
+// Last Modified On : Sat Apr 10 08:42:15 2021
+// Update Count     : 18
 // 
 
@@ -85,16 +85,17 @@
 	sout | "double";
 	double d = 3.537;
-	printf( "%g  %#8f %g %8f %#8.0f %8.0f %8.2f %-8.2f %-+#8.2f %08.2F %8.2E %8.2a %8.2A %8.2e\n",
-			0.0,  3.0, d,  d,     d,    d,    d,     d,       d,     d,    d,    d,    d,    d );
-	sout | 0.0 | wd(8, 3.0) | d | wd(8, d) | nodp(wd(8,0, d)) | wd(8,0, d) | wd(8,2, d) | nonl;
-	sout | left(wd(8,2, d)) | left(sign(wd(8,2, d))) | pad0(upcase(wd(8,2, d))) | upcase(wd(8,2, sci(d))) | wd(8,2, hex(d)) | upcase(wd(8,2, hex(d))) | wd(8,2, sci(d));
+	printf( "%g  %8g %#8g %g %8g %8.0g %#8.0g %8.2g %#8.2g %-8.2g %-8.2g %-#8.2g %-+8.2g %-+#8.2g %08.2g %8.2E %8.2a %#8.2A %#8.2e\n",
+		    0.0, 3.0, 3.0, d,  d,    d,     d,    d,     d,   3.0,     d,      d,      d,       d,     d,    d,    d,     d,     d );
+	sout | 0.0 | wd(8, 3.0) | nodp(wd(8, 3.0)) | d | wd(8, d) | ws(8,0, d) | nodp(ws(8,0, d)) | ws(8,2, d) | nodp(ws(8,2, d)) | nonl;
+	sout | left(ws(8,2, 3.0)) | left(ws(8,2, d)) | left(nodp(ws(8,2, d))) | left(sign(ws(8,2, d))) | left(sign(nodp(ws(8,2, d)))) | nonl;
+	sout | pad0(ws(8,2, d)) | upcase(wd(8,2, sci(d))) | wd(8,2, hex(d)) | upcase(wd(8,2, hex(d))) | nodp(wd(8,2, sci(d)));
 
 	sout | "long double";
 	long double ld = 3.537;
-	printf( "%Lg  %#8Lf %Lg %8Lf %#8.0Lf %8.0Lf %8.2Lf %-8.2Lf %-+#8.2Lf %08.2LF %8.2LE %8.2La %8.2LA %8.2Le\n",
-			0.0L,  3.0L, ld,  ld,     ld,    ld,    ld,     ld,       ld,     ld,    ld,    ld,    ld,    ld );
-	sout | 0.0L | wd(8, 3.0L) | ld | wd(8, ld) | nodp(wd(8,0, ld)) | wd(8,0, ld) | wd(8,2, ld) | nonl;
-	sout | left(wd(8,2, ld)) | left(sign(wd(8,2, ld))) | pad0(upcase(wd(8,2, ld))) | upcase(wd(8,2, sci(ld))) | wd(8,2, hex(ld)) | upcase(wd(8,2, hex(ld))) | wd(8,2, sci(ld));
-
+	printf( "%Lg  %8Lg %#8Lg %Lg %8Lg %8.0Lg %#8.0Lg %8.2Lg %#8.2Lg %-8.2Lg %-8.2Lg %-#8.2Lg %-+8.2Lg %-+#8.2Lg %08.2Lg %8.2LE %8.2La %#8.2LA %#8.2Le\n",
+		    0.0L, 3.0L, 3.0L, ld,  ld,    ld,     ld,    ld,     ld,   3.0L,     ld,      ld,      ld,       ld,     ld,    ld,    ld,     ld,     ld );
+	sout | 0.0L | wd(8, 3.0L) | nodp(wd(8, 3.0L)) | ld | wd(8, ld) | ws(8,0, ld) | nodp(ws(8,0, ld)) | ws(8,2, ld) | nodp(ws(8,2, ld)) | nonl;
+	sout | left(ws(8,2, 3.0L)) | left(ws(8,2, ld)) | left(nodp(ws(8,2, ld))) | left(sign(ws(8,2, ld))) | left(sign(nodp(ws(8,2, ld)))) | nonl;
+	sout | pad0(ws(8,2, ld)) | upcase(wd(8,2, sci(ld))) | wd(8,2, hex(ld)) | upcase(wd(8,2, hex(ld))) | nodp(wd(8,2, sci(ld)));
 
 	sout | nl | "char";
@@ -117,4 +118,4 @@
 // Local Variables: //
 // tab-width: 4 //
-// compile-command: "cfa -Wall -Wextra amanipulatorsOutput1.cfa" //
+// compile-command: "cfa -Wall -Wextra manipulatorsOutput1.cfa" //
 // End: //
Index: tests/io/manipulatorsOutput2.cfa
===================================================================
--- tests/io/manipulatorsOutput2.cfa	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/io/manipulatorsOutput2.cfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -7,6 +7,6 @@
 // Created On       : Sat Jun  8 18:04:11 2019
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Nov 15 08:11:53 2020
-// Update Count     : 9
+// Last Modified On : Sat Apr 10 09:16:09 2021
+// Update Count     : 11
 // 
 
@@ -24,4 +24,5 @@
     sout | hex(-27.5F) | hex(-27.5) | hex(-27.5L);
 	sout | sci(0.0) | sci(27.5) | sci(-27.5);
+	sout | eng(0.0) | eng(27.5) | eng(-27.5);
 	sout | upcase(bin(27)) | upcase(hex(27)) | upcase(27.5e-10) | upcase(hex(27.5));
 	sout | nobase(bin(27)) | nobase(oct(27)) | nobase(hex(27));
Index: tests/io/manipulatorsOutput3.cfa
===================================================================
--- tests/io/manipulatorsOutput3.cfa	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/io/manipulatorsOutput3.cfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -1,2 +1,14 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo
+// 
+// manipulatorsOutput3.cfa -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Tue Apr 13 17:54:23 2021
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Apr 13 17:54:48 2021
+// Update Count     : 1
+// 
+
 #include <fstream.hfa>
 
Index: tests/io/manipulatorsOutput4.cfa
===================================================================
--- tests/io/manipulatorsOutput4.cfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
+++ tests/io/manipulatorsOutput4.cfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -0,0 +1,49 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo
+// 
+// manipulatorsOutput4.cfa -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Tue Apr 13 17:55:02 2021
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Apr 13 18:00:33 2021
+// Update Count     : 4
+// 
+
+#include <fstream.hfa>
+
+int main() {
+	for ( double w = 1e-27; w < 1e30; w *= 10 ) {
+		sout | w | eng(w) | sign(eng(w)) | ws(12,5, eng(w) ) | sign(ws(12,5, eng(w) )) | wd(12,5, eng(w) ) | sign(wd(12,5, eng(w) )) | pad0(ws(12,5, eng(w) )) | pad0(sign(ws(12,5, eng(w) ))) | pad0(wd(12,5, eng(w) )) | pad0(sign(wd(12,5, eng(w) )))
+			 | left(ws(12,5, eng(w) )) | left(sign(ws(12,5, eng(w) ))) | left(wd(12,5, eng(w) )) | left(sign(wd(12,5, eng(w) ))) | left(pad0(ws(12,5, eng(w) ))) | left(pad0(sign(ws(12,5, eng(w) )))) | left(pad0(wd(12,5, eng(w) ))) | left(pad0(sign(wd(12,5, eng(w) ))));
+	} // for
+	sout | nl;
+
+	for ( double w = 1e-27; w < 1e30; w *= 42 ) {
+		sout | w | eng(w) | sign(eng(w)) | ws(12,5, eng(w) ) | sign(ws(12,5, eng(w) )) | wd(12,5, eng(w) ) | sign(wd(12,5, eng(w) )) | pad0(ws(12,5, eng(w) )) | pad0(sign(ws(12,5, eng(w) ))) | pad0(wd(12,5, eng(w) )) | pad0(sign(wd(12,5, eng(w) )))
+			 | left(ws(12,5, eng(w) )) | left(sign(ws(12,5, eng(w) ))) | left(wd(12,5, eng(w) )) | left(sign(wd(12,5, eng(w) ))) | left(pad0(ws(12,5, eng(w) ))) | left(pad0(sign(ws(12,5, eng(w) )))) | left(pad0(wd(12,5, eng(w) ))) | left(pad0(sign(wd(12,5, eng(w) ))));
+	} // for
+	sout | nl;
+
+	for ( double w = 1e-27; w < 1e30; w *= 10 ) {
+		sout | w | unit(eng(w)) | unit(sign(eng(w))) | unit(ws(12,5, eng(w) )) | unit(sign(ws(12,5, eng(w) ))) | unit(wd(12,5, eng(w) )) | unit(sign(wd(12,5, eng(w) ))) | unit(pad0(ws(12,5, eng(w) ))) | unit(pad0(sign(ws(12,5, eng(w) )))) | unit(pad0(wd(12,5, eng(w) ))) | unit(pad0(sign(wd(12,5, eng(w) ))))
+			| unit(left(ws(12,5, eng(w) ))) | unit(left(sign(ws(12,5, eng(w) )))) | unit(left(wd(12,5, eng(w) ))) | unit(left(sign(wd(12,5, eng(w) )))) | unit(left(pad0(ws(12,5, eng(w) )))) | unit(left(pad0(sign(ws(12,5, eng(w) ))))) | unit(left(pad0(wd(12,5, eng(w) )))) | unit(left(pad0(sign(wd(12,5, eng(w) )))));
+	} // for
+	sout | nl;
+
+	for ( double w = 1e-27; w < 1e30; w *= 42 ) {
+		sout | w | unit(eng(w)) | unit(sign(eng(w))) | unit(ws(12,5, eng(w) )) | unit(sign(ws(12,5, eng(w) ))) | unit(wd(12,5, eng(w) )) | unit(sign(wd(12,5, eng(w) ))) | unit(pad0(ws(12,5, eng(w) ))) | unit(pad0(sign(ws(12,5, eng(w) )))) | unit(pad0(wd(12,5, eng(w) ))) | unit(pad0(sign(wd(12,5, eng(w) ))))
+			| unit(left(ws(12,5, eng(w) ))) | unit(left(sign(ws(12,5, eng(w) )))) | unit(left(wd(12,5, eng(w) ))) | unit(left(sign(wd(12,5, eng(w) )))) | unit(left(pad0(ws(12,5, eng(w) )))) | unit(left(pad0(sign(ws(12,5, eng(w) ))))) | unit(left(pad0(wd(12,5, eng(w) )))) | unit(left(pad0(sign(wd(12,5, eng(w) )))));
+	} // for
+	sout | nl;
+
+	for ( double w = -1e-27; w > -1e30; w *= 42 ) {
+		sout | w | eng(w) | sign(eng(w)) | ws(12,5, eng(w) ) | sign(ws(12,5, eng(w) )) | wd(12,5, eng(w) ) | sign(wd(12,5, eng(w) )) | pad0(ws(12,5, eng(w) )) | pad0(sign(ws(12,5, eng(w) ))) | pad0(wd(12,5, eng(w) )) | pad0(sign(wd(12,5, eng(w) )))
+			 | left(ws(12,5, eng(w) )) | left(sign(ws(12,5, eng(w) ))) | left(wd(12,5, eng(w) )) | left(sign(wd(12,5, eng(w) ))) | left(pad0(ws(12,5, eng(w) ))) | left(pad0(sign(ws(12,5, eng(w) )))) | left(pad0(wd(12,5, eng(w) ))) | left(pad0(sign(wd(12,5, eng(w) ))));
+	} // for
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa -Wall -Wextra manipulatorsOutput4.cfa" //
+// End: //
Index: tests/math.cfa
===================================================================
--- tests/math.cfa	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/math.cfa	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -10,6 +10,6 @@
 // Created On       : Fri Apr 22 14:59:21 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Feb 20 18:00:48 2021
-// Update Count     : 115
+// Last Modified On : Tue Apr 13 17:28:58 2021
+// Update Count     : 122
 //
 
@@ -69,4 +69,8 @@
 	sout | "log:" | log( 1.0F ) | log( 1.0D ) | log( 1.0L ) | nonl;
 	sout | log( 1.0F+1.0FI ) | log( 1.0D+1.0DI ) | log( 1.0DL+1.0LI );
+	sout | "log2:" | log2( 1024 ) | log2( 2 \ 17u ) | log2( 2 \ 23u );
+	sout | "log2:" | log2( 1024l ) | log2( 2l \ 17u ) | log2( 2l \ 23u );
+	sout | "log2:" | log2( 1024ll ) | log2( 2ll \ 17u ) | log2( 2ll \ 23u );
+	sout | "log2:" | log2( 1024l128 ) | log2( 2l128 \ 17u ) | log2( 2l128 \ 23u );
 	sout | "log2:" | log2( 8.0F ) | log2( 8.0D ) | log2( 8.0L );
 	sout | "log10:" | log10( 100.0F ) | log10( 100.0D ) | log10( 100.0L );
Index: tests/vector_math/.expect/vec4_float.txt
===================================================================
--- tests/vector_math/.expect/vec4_float.txt	(revision 7f5683e110e3e89dd201b8df0e56ae26b4a82bcd)
+++ tests/vector_math/.expect/vec4_float.txt	(revision 47e000c054a8dc58293a93fbc643e10735fd30f9)
@@ -6,7 +6,7 @@
 zero-assign:<0.,0.,0.,0.>
 fill-ctor:<1.23,1.23,1.23,1.23>
-?-?:<0.02,0.43,-0.999998,-1e-06.>
-?-=?:<0.02,0.43,-0.999998,-1e-06.>
--?:<-0.02,-0.43,0.999998,1e-06.>
+?-?:<0.02,0.43,-0.999998,-1e-06>
+?-=?:<0.02,0.43,-0.999998,-1e-06>
+-?:<-0.02,-0.43,0.999998,1e-06>
 ?+?:<2.3,2.45,-9.2,-12.5>
 ?+=?:<2.3,2.45,-9.2,-12.5>
