Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 7b149bc32dd824b0b1d56d7ba3ad6199222bc3e5)
+++ libcfa/src/iostream.cfa	(revision b2ac656b65ec67cbcf7bccc00c660425d5ce0ee7)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 13 12:46:45 2019
-// Update Count     : 650
+// Last Modified On : Sun May 19 10:48:27 2019
+// Update Count     : 654
 //
 
@@ -23,5 +23,5 @@
 extern size_t strlen (const char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
 #include <float.h>										// DBL_DIG, LDBL_DIG
-#include <math.h>										// modff, modf, modlf
+#include <math.h>										// isfinite
 #include <complex.h>									// creal, cimag
 }
@@ -154,9 +154,17 @@
 	} // ?|?
 
+	static void checkDecPt( ostype & os, const char * buf, int len ) {
+		for ( int i = 0;; i += 1 ) {
+			if ( i == len ) { fmt( os, "." ); break; }
+			if ( buf[i] == '.' ) break;
+		} // for
+	} // checkDecPt
+
 	ostype & ?|?( ostype & os, float f ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		fmt( os, "%g", f );
-		float tempi;
-		if ( isfinite( f ) && modff( f, &tempi ) == 0.0F ) fmt( os, "." ); // always print decimal point
+		char buf[48];
+		int len = snprintf( buf, 48, "%g", f );
+		fmt( os, "%s", buf );
+		if ( isfinite( f ) ) checkDecPt( os, buf, len ); // always print decimal point
 		return os;
 	} // ?|?
@@ -167,8 +175,8 @@
 	ostype & ?|?( ostype & os, double d ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		fmt( os, "%.*lg", DBL_DIG, d );
-		// fmt( os, "%lg", d );
-		double tempi;
-		if ( isfinite( d ) && modf( d, &tempi ) == 0.0D ) fmt( os, "." ); // always print decimal point
+		char buf[48];
+		int len = snprintf( buf, 48, "%.*lg", DBL_DIG, d );
+		fmt( os, "%s", buf );
+		if ( isfinite( d ) ) checkDecPt( os, buf, len ); // always print decimal point
 		return os;
 	} // ?|?
@@ -179,8 +187,8 @@
 	ostype & ?|?( ostype & os, long double ld ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		fmt( os, "%.*Lg", LDBL_DIG, ld );
-		// fmt( os, "%Lg", ld );
-		long double tempi;
-		if ( isfinite( ld ) && modfl( ld, &tempi ) == 0.0L ) fmt( os, "." ); // always print decimal point
+		char buf[48];
+		int len = snprintf( buf, 48, "%.*Lg", LDBL_DIG, ld );
+		fmt( os, "%s", buf );
+		if ( isfinite( ld ) ) checkDecPt( os, buf, len ); // always print decimal point
 		return os;
 	} // ?|?
@@ -191,10 +199,14 @@
 	ostype & ?|?( ostype & os, float _Complex fc ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		float temp = crealf( fc ), tempi;
-		fmt( os, "%g", temp );
-		if ( isfinite( temp ) && modff( temp, &tempi ) == 0.0F ) fmt( os, "." ); // always print decimal point
-		temp = cimagf( fc );
-		fmt( os, "%+g", temp );
-		if ( isfinite( temp ) && modff( temp, &tempi ) == 0.0F ) fmt( os, "." ); // always print decimal point
+//		os | crealf( fc ) | nonl;
+		float f = crealf( fc );
+		char buf[48];
+		int len = snprintf( buf, 48, "%g", f );
+		fmt( os, "%s", buf );
+		if ( isfinite( f ) ) checkDecPt( os, buf, len ); // always print decimal point
+		f = cimagf( fc );
+		len = snprintf( buf, 48, "%+g", f );
+		fmt( os, "%s", buf );
+		if ( isfinite( f ) ) checkDecPt( os, buf, len ); // always print decimal point
 		fmt( os, "i" );
 		return os;
@@ -206,12 +218,15 @@
 	ostype & ?|?( ostype & os, double _Complex dc ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		double temp = creal( dc ), tempi;
-		fmt( os, "%.*lg", DBL_DIG, temp );
-		if ( isfinite( temp ) && modf( temp, &tempi ) == 0.0D ) fmt( os, "." ); // always print decimal point
-		temp = cimag( dc );
-		fmt( os, "%+.*lg", DBL_DIG, temp );
-		if ( isfinite( temp ) && modf( temp, &tempi ) == 0.0D ) fmt( os, "." ); // always print decimal point
+//		os | creal( dc ) | nonl;
+		double d = creal( dc );
+		char buf[48];
+		int len = snprintf( buf, 48, "%.*lg", DBL_DIG, d );
+		fmt( os, "%s", buf );
+		if ( isfinite( d ) ) checkDecPt( os, buf, len ); // always print decimal point
+		d = cimag( dc );
+		len = snprintf( buf, 48, "%+.*lg", DBL_DIG, d );
+		fmt( os, "%s", buf );
+		if ( isfinite( d ) ) checkDecPt( os, buf, len ); // always print decimal point
 		fmt( os, "i" );
-		// fmt( os, "%lg%+lgi", creal( dc ), cimag( dc ) );
 		return os;
 	} // ?|?
@@ -222,12 +237,15 @@
 	ostype & ?|?( ostype & os, long double _Complex ldc ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		long double temp = creall( ldc ), tempi;
-		fmt( os, "%.*Lg", LDBL_DIG, temp );
-		if ( isfinite( temp ) && modfl( temp, &tempi ) == 0.0L ) fmt( os, "." ); // always print decimal point
-		temp = cimagl( ldc );
-		fmt( os, "%+.*Lg", LDBL_DIG, cimagl( ldc ) );
-		if ( isfinite( temp ) && modfl( temp, &tempi ) == 0.0L ) fmt( os, "." ); // always print decimal point
+//		os | creall( ldc ) || nonl;
+		long double ld = creall( ldc );
+		char buf[48];
+		int len = snprintf( buf, 48, "%.*Lg", LDBL_DIG, ld );
+		fmt( os, "%s", buf );
+		if ( isfinite( ld ) ) checkDecPt( os, buf, len ); // always print decimal point
+		ld = cimagl( ldc );
+		len = snprintf( buf, 48, "%+.*Lg", LDBL_DIG, ld );
+		fmt( os, "%s", buf );
+		if ( isfinite( ld ) ) checkDecPt( os, buf, len ); // always print decimal point
 		fmt( os, "i" );
-		// fmt( os, "%Lg%+Lgi", creall( ldc ), cimagl( ldc ) );
 		return os;
 	} // ?|?
Index: tests/.expect/loopctrl.txt
===================================================================
--- tests/.expect/loopctrl.txt	(revision 7b149bc32dd824b0b1d56d7ba3ad6199222bc3e5)
+++ tests/.expect/loopctrl.txt	(revision b2ac656b65ec67cbcf7bccc00c660425d5ce0ee7)
@@ -24,5 +24,5 @@
 2.1 3.8 5.5 7.2 8.9
 10 8 6 4 2 0
-12.1 10.4 8.7 7 5.3 3.6
+12.1 10.4 8.7 7. 5.3 3.6
 
 N N N N N N N N N N
Index: tests/.expect/math3.txt
===================================================================
--- tests/.expect/math3.txt	(revision 7b149bc32dd824b0b1d56d7ba3ad6199222bc3e5)
+++ tests/.expect/math3.txt	(revision b2ac656b65ec67cbcf7bccc00c660425d5ce0ee7)
@@ -9,3 +9,3 @@
 lgamma:1.79176 1.79175946922805 1.791759469228055
 lgamma:1.79176 1 1.79175946922805 1 1.791759469228055 1
-tgamma:6 6. 6.
+tgamma:6. 6. 6.
Index: tests/.expect/math4.txt
===================================================================
--- tests/.expect/math4.txt	(revision 7b149bc32dd824b0b1d56d7ba3ad6199222bc3e5)
+++ tests/.expect/math4.txt	(revision b2ac656b65ec67cbcf7bccc00c660425d5ce0ee7)
@@ -18,6 +18,6 @@
 modf:2. 0.3 2. 0.3 2. 0.3
 modf:2., 0.3 2., 0.3 2., 0.3
-nextafter:2 2 2
-nexttoward:2 2 2
+nextafter:2. 2. 2.
+nexttoward:2. 2. 2.
 scalbn:16. 16. 16.
 scalbln:16. 16. 16.
