Index: arch/ia32/src/boot/memmap.S
===================================================================
--- arch/ia32/src/boot/memmap.S	(revision ffcccf266e1c6f6e41ba1209bd6db02c51456880)
+++ arch/ia32/src/boot/memmap.S	(revision 51022e9b693b712b72c0faca8aa70dedc9d322a8)
@@ -116,3 +116,3 @@
 e801memorysize:
 	.long	0
-	
+
Index: include/print.h
===================================================================
--- include/print.h	(revision ffcccf266e1c6f6e41ba1209bd6db02c51456880)
+++ include/print.h	(revision 51022e9b693b712b72c0faca8aa70dedc9d322a8)
@@ -37,5 +37,5 @@
 #define INT64	8
 
-static void print_double(double num,__u16 precision) ;
+static void print_double(double num, __u8 modifier, __u16 precision) ;
 static void print_str(const char *str);
 static void print_fixed_hex(const __u64 num, const int width);
Index: src/debug/print.c
===================================================================
--- src/debug/print.c	(revision ffcccf266e1c6f6e41ba1209bd6db02c51456880)
+++ src/debug/print.c	(revision 51022e9b693b712b72c0faca8aa70dedc9d322a8)
@@ -42,5 +42,5 @@
 #define DEFAULT_DOUBLE_BUFFER_SIZE 128
 
-void print_double(double num, __u16 precision) 
+void print_double(double num, __u8 modifier, __u16 precision) 
 {
 	double intval,intval2;
@@ -49,4 +49,5 @@
 	unsigned char buf[DEFAULT_DOUBLE_BUFFER_SIZE];
 	unsigned long in1,in2;	
+	
 	/*
 	if (fmath_is_nan(num)) {
@@ -61,4 +62,21 @@
 	
 	num=fmath_abs(num);
+
+	if ((modifier=='E')||(modifier=='e')) {
+		intval2=fmath_fint(fmath_get_decimal_exponent(num),&intval);
+		exponent=intval;
+		if ((intval2<0.0)&&(exponent<0)) exponent--;
+		num = num / ((fmath_dpow(10.0,exponent)));
+		
+		print_double(num,modifier+1,precision); //modifier+1 = E => F or e => f
+		putchar(modifier);
+		if (exponent<0) {
+			putchar('-');
+			exponent*=-1;
+			}
+		print_number(exponent,10);
+		return;
+		}
+		
 
 	/*
@@ -233,5 +251,7 @@
 	va_list ap;
 	char c;	
-
+	
+	__u16 precision;
+	
 	va_start(ap, fmt);
 
@@ -242,6 +262,20 @@
 		switch (c) {
 
+			
+			
 		    /* control character */
 		    case '%':
+		    
+				precision = DEFAULT_DOUBLE_PRECISION;
+				if (fmt[i]=='.') {
+					precision=0;
+					c=fmt[++i];
+						while((c>='0')&&(c<='9')) {
+							precision = precision*10 + c - '0';
+							c=fmt[++i];
+							}
+						
+				}
+		    
 			    switch (c = fmt[i++]) {
 
@@ -299,7 +333,18 @@
 				
 				case 'F':
+		    			print_double(va_arg(ap, double),'F',precision);
+					goto loop;
+					
 				case 'f':
-		    			print_double(va_arg(ap, double),DEFAULT_DOUBLE_PRECISION);
-					goto loop;
+		    			print_double(va_arg(ap, double),'f',precision);
+					goto loop;
+				
+				case 'E':
+		    			print_double(va_arg(ap, double),'E',precision);
+					goto loop;
+				case 'e':
+		    			print_double(va_arg(ap, double),'e',precision);
+					goto loop;
+				
 				/*
 		                 * Decimal and hexadecimal conversions.
Index: test/print/print1/test.c
===================================================================
--- test/print/print1/test.c	(revision ffcccf266e1c6f6e41ba1209bd6db02c51456880)
+++ test/print/print1/test.c	(revision 51022e9b693b712b72c0faca8aa70dedc9d322a8)
@@ -39,4 +39,13 @@
 	printf(" F  %F	%f (123456789.987654321)\n",123456789.987654321,123456789.987654321);
 	printf(" F  %F	%f (-123456789.987654321e-10)\n",-123456789.987654321e-10,-123456789.987654321e-10);
+	printf(" E  %E	%e (123456789.987654321)\n",123456789.987654321,123456789.987654321);
+	printf(" E  %.10E %.8e (-123456789.987654321e-12 for precision 10 & 8)\n",-123456789.987654321e-12,-123456789.987654321e-12);
+	printf(" E  %.10E %.8e (-987654321.123456789e-12 for precision 10 & 8)\n",-987654321.123456789e-12,-987654321.123456789e-12);
+	printf(" E  %.10E %.8e (123456789.987654321e-12 for precision 10 & 8)\n",123456789.987654321e-12,123456789.987654321e-12);
+	printf(" E  %.10E %.8e (987654321.123456789e-12 for precision 10 & 8)\n",987654321.123456789e-12,987654321.123456789e-12);
+	printf(" E  %.10E %.8e (-123456789.987654321e12 for precision 10 & 8)\n",-123456789.987654321e12,-123456789.987654321e12);
+	printf(" E  %.10E %.8e (-987654321.123456789e12 for precision 10 & 8)\n",-987654321.123456789e12,-987654321.123456789e12);
+	printf(" E  %.10E %.8e (123456789.987654321e12 for precision 10 & 8)\n",123456789.987654321e12,123456789.987654321e12);
+	printf(" E  %.10E %.8e (987654321.123456789e12 for precision 10 & 8)\n",987654321.123456789e12,987654321.123456789e12);
 	return;
 }
