diff --git a/src/stdio/src/printf.rs b/src/stdio/src/printf.rs
index ead0a05cf3acd82e5cfbf0886e6fdddce3c89cf9..54ce1f7644b09754a2a799585a691c7be626f165 100644
--- a/src/stdio/src/printf.rs
+++ b/src/stdio/src/printf.rs
@@ -36,7 +36,7 @@ pub unsafe fn printf<W: fmt::Write>(mut w: W, format: *const c_char, mut ap: VaL
                     found_percent = false;
                 }
                 'f' | 'F' => {
-                    let a: f64 = mem::transmute(ap.get::<u64>());
+                    let a = ap.get::<f64>();
 
                     w.write_fmt(format_args!("{}", a));
 
diff --git a/tests/atof.c b/tests/atof.c
index b6668aab8994f324c10548480d485900e602c5a3..1bfb9d0e220d4029fadb86716017705061958146 100644
--- a/tests/atof.c
+++ b/tests/atof.c
@@ -2,7 +2,7 @@
 #include <stdio.h>
 
 int main(int argc, char* argv[]) {
-    double d = atof("1.0");
+    double d = atof("-3.14");
     printf("%f\n", d);
     return 0;
 }
diff --git a/va_list b/va_list
index 4762a184501beedbb58ea218f0c84fea85685c35..1945668b2fc6e96c498003dce700ebaf95108fac 160000
--- a/va_list
+++ b/va_list
@@ -1 +1 @@
-Subproject commit 4762a184501beedbb58ea218f0c84fea85685c35
+Subproject commit 1945668b2fc6e96c498003dce700ebaf95108fac