Index: /soft/giet_vm/giet_libs/stdlib.c
===================================================================
--- /soft/giet_vm/giet_libs/stdlib.c	(revision 809)
+++ /soft/giet_vm/giet_libs/stdlib.c	(revision 810)
@@ -230,7 +230,7 @@
                 break;
             }
-            case ('e'):
-            case ('f'):
-            case ('g'):             // IEEE754 64 bits
+            case ('f'):             // IEEE754 64 bits
+                                    // integer part : up to 10 decimal digits
+                                    // decimal part : 9 decimal digits
             {
                 union
@@ -242,20 +242,13 @@
                 val.d = va_arg( *args, double );
                 
-                unsigned long long digits;
-                digits = val.ull & 0xFFFFFFFFFFFFFULL;    // mantisse
-                
-                unsigned int base;
-                base = (unsigned int)((val.ull & 0x7FF0000000000000ULL) >> 52); // exp 
-
-                unsigned int intp;
-                intp = (unsigned int)val.d;         // integer part 
-
-                unsigned int decp;                  // decimal part
-                
-                int isvalue = 0;
-                
-                if (base == 0x7FF) // special values
-                {
-                    if (digits & 0xFFFFFFFFFFFFFULL)  // Not a Number
+                unsigned long long mantisse;
+                mantisse = val.ull & 0xFFFFFFFFFFFFFULL;    // mantisse
+                
+                unsigned int exp;
+                exp = (unsigned int)((val.ull & 0x7FF0000000000000ULL) >> 52); // exp 
+
+                if (exp == 0x7FF) // special values
+                {
+                    if (mantisse & 0xFFFFFFFFFFFFFULL)  // Not a Number
                     {
                         buf[0] = 'N';
@@ -277,31 +270,40 @@
                     break;
                 }
-                
-                if (val.ull & 0x8000000000000000ULL)  // negative
+
+                // display sign & analyse overflow 
+                unsigned int overflow = 0;
+                if (val.ull & 0x8000000000000000ULL)  // negative 
                 {
                     TO_STREAM( '-' );
                     val.d = val.d * -1;
+                    if( val.d < -9999999999.0) overflow = 1;
                 }
                 else                                  // positive
                 {
                     TO_STREAM( '+' );
-                }
-                
-                if (val.d > 0xFFFFFFFF)              // overflow
-                {
-                    buf[0] = 'B';
-                    buf[1] = 'I';
-                    buf[2] = 'G';
+                    if( val.d > 9999999999.0) overflow = 1;
+                }
+                
+                // check overflow caused by the 10.9 format
+                if ( overflow )    
+                {
+                    buf[0] = 'o';
+                    buf[1] = 'v';
+                    buf[2] = 'r';
                     len = 3;
                     pbuf = buf;
                     break;
                 }
-                
+
+                // compute integer & decimal parts
+                unsigned int intp;                  // integer part
+                unsigned int decp;                  // decimal part
+                intp = (unsigned int)val.d;      
                 val.d -= (double)intp;
                 decp = (unsigned int)(val.d * 1000000000);
                 
+                // display decimal value in 10.9 format
                 for(i = 0; i < 10; i++) 
                 {
-                    if ((!isvalue) && (intp % 10)) isvalue = 1;
                     buf[9 - i] = HexaTab[intp % 10];
                     if (!(intp /= 10)) break;
@@ -310,25 +312,9 @@
                 len = i+11;
                 buf[10] = '.';
-                
                 for(i = 0; i < 9; i++)
                 {
-                    if ((!isvalue) && (decp % 10)) isvalue = 1;
                     buf[19 - i] = HexaTab[decp % 10];
                     decp /= 10;
                 }
-                
-                if (!isvalue)
-                {
-                    if (val.d != 0)                   // underflow
-                    {
-                        buf[0] = 'T';
-                        buf[1] = 'I';
-                        buf[2] = 'N';
-                        buf[3] = 'Y';
-                        len = 4;
-                        pbuf = buf;
-                    }
-                }
-
                 break;
             }
