diff --git a/include/io_frontend.h b/include/io_frontend.h
index 01a93d737f3c918e9e17ee788f9e51d9de0cf44a..09084965639f0da3c19a6b315c278b8388d41655 100644
--- a/include/io_frontend.h
+++ b/include/io_frontend.h
@@ -23,6 +23,9 @@ extern void _put_bool(FILE* file, char* n, _Bool _V);
 extern void _put_int(FILE* file, char* n, int _V);
 
 /*@ assigns \nothing; */
-extern void _put_double(FILE* file, char* n, double _V);
+extern void _put_float(FILE* file, char* n, float _V, int PREC);
+
+/*@ assigns \nothing; */
+extern void _put_double(FILE* file, char* n, double _V, int PREC);
 
 #endif
diff --git a/include/io_frontend.hpp b/include/io_frontend.hpp
index 0450f44dde9ccf4e80817f6b0071eae6cc517dcb..b02385e274ffdee7325fcc1c70268d41f30ca3b3 100644
--- a/include/io_frontend.hpp
+++ b/include/io_frontend.hpp
@@ -80,15 +80,30 @@ void _put_int(FILE* file, char* n, int _V){
   printf("\n");
   fprintf(file, "%d\n", _V);
 }
-void _put_double(FILE* file, char* n, double _V){
+
+void _put_float(FILE* file, char* n, float _V, int PREC){
+  if(ISATTY) {
+    printf("%s = ", n);
+  } else {
+    printf("'%s': ", n);
+  };
+  printf("'%.*f' ", PREC, _V);
+  printf("\n");
+  fprintf(file, "%.*f\n", PREC, _V);
+  fflush(file);
+}
+
+void _put_double(FILE* file, char* n, double _V, int PREC){
   if(ISATTY) {
     printf("%s = ", n);
   } else {
     printf("'%s': ", n);
   };
-  printf("'%f' ", _V);
+  printf("'%.*f' ", PREC, _V);
   printf("\n");
-  fprintf(file, "%f\n", _V);
+  fprintf(file, "%.*f\n", PREC, _V);
+  fflush(file);
 }
 
+
 #endif