Index: uspace/app/top/screen.c
===================================================================
--- uspace/app/top/screen.c	(revision 638927aaf96314b3f36042b364dd1bba880197ba)
+++ uspace/app/top/screen.c	(revision e43cdac49002cebbacc64f283bba4fdfa5282411)
@@ -52,12 +52,12 @@
 #define BLACK 0x000000
 
-static void print_float(float f, int precision)
-{
-	printf("%2u.", (unsigned int) f);
+static void print_float(ps_float f, int precision)
+{
+	printf("%2u.", f.upper / f.lower);
 	int i;
-	float rest = (f - (int)f) * 10;
+	unsigned int rest = (f.upper % f.lower) * 10;
 	for (i = 0; i < precision; ++i) {
-		printf("%d", (unsigned int)rest);
-		rest = (rest - (int)rest) * 10;
+		printf("%d", rest / f.lower);
+		rest = (rest % f.lower) * 10;
 	}
 }
@@ -208,7 +208,7 @@
 	fflush(stdout);
 	console_set_rgb_color(fphone(stdout), WHITE, BLACK);
-	printf("      ID  Threads      Mem      %%Mem %%uCycles %%kCycles Name");
+	printf("      ID  Threads      Mem      %%Mem %%uCycles %%kCycles  Name");
 	int i;
-	for (i = 60; i < colls; ++i)
+	for (i = 61; i < colls; ++i)
 		puts(" ");
 	fflush(stdout);
Index: uspace/app/top/top.c
===================================================================
--- uspace/app/top/top.c	(revision 638927aaf96314b3f36042b364dd1bba880197ba)
+++ uspace/app/top/top.c	(revision e43cdac49002cebbacc64f283bba4fdfa5282411)
@@ -110,6 +110,6 @@
 		uint64_t busy = new_data->cpus[i].busy_ticks - old_data->cpus[i].busy_ticks;
 		uint64_t sum = idle + busy;
-		new_data->cpu_perc[i].idle = (float)(idle * 100) / sum;
-		new_data->cpu_perc[i].busy = (float)(busy * 100) / sum;
+		FRACTION_TO_FLOAT(new_data->cpu_perc[i].idle, idle * 100, sum);
+		FRACTION_TO_FLOAT(new_data->cpu_perc[i].busy, busy * 100, sum);
 	}
 
@@ -143,7 +143,7 @@
 	new_data->task_perc = malloc(new_data->task_count * sizeof(task_perc_t));
 	for (i = 0; i < new_data->task_count; ++i) {
-		new_data->task_perc[i].mem = (float)(new_data->taskinfos[i].virt_mem * 100) / mem_total;
-		new_data->task_perc[i].ucycles = (float)(ucycles_diff[i] * 100) / ucycles_total;
-		new_data->task_perc[i].kcycles = (float)(kcycles_diff[i] * 100) / kcycles_total;
+		FRACTION_TO_FLOAT(new_data->task_perc[i].mem, new_data->taskinfos[i].virt_mem * 100, mem_total);
+		FRACTION_TO_FLOAT(new_data->task_perc[i].ucycles, ucycles_diff[i] * 100, ucycles_total);
+		FRACTION_TO_FLOAT(new_data->task_perc[i].kcycles, kcycles_diff[i] * 100, kcycles_total);
 	}
 
Index: uspace/app/top/top.h
===================================================================
--- uspace/app/top/top.h	(revision 638927aaf96314b3f36042b364dd1bba880197ba)
+++ uspace/app/top/top.h	(revision e43cdac49002cebbacc64f283bba4fdfa5282411)
@@ -38,13 +38,23 @@
 #include <kernel/ps/taskinfo.h>
 
+#define FRACTION_TO_FLOAT(float, a, b) { \
+	(float).upper = (a); \
+	(float).lower = (b); \
+}
+
 typedef struct {
-	float idle;
-	float busy;
+	uint64_t upper;
+	uint64_t lower;
+} ps_float;
+
+typedef struct {
+	ps_float idle;
+	ps_float busy;
 } cpu_perc_t;
 
 typedef struct {
-	float ucycles;
-	float kcycles;
-	float mem;
+	ps_float ucycles;
+	ps_float kcycles;
+	ps_float mem;
 } task_perc_t;
 
