Why f64 and not f32?
Three reasons.
First, WAT's f64 maps to Zig's f64, JavaScript's number, and C's double. It's the natural size. f32 would require explicit truncation in most host environments.
Second, f64 has 53 bits of significand -- enough to exactly represent every 32-bit integer. This means f64_from_i64(n) is lossless for values up to 2^53. With f32 (24 bits of significand), even f32_from_i64(16777217) loses precision. Since our integer type is 64-bit, f64 is the safe companion.
Third, f64.const 3.14 in WAT is 8 bytes, same as i64.const. No size savings from f32. The VM stack is already 8 bytes per slot. Everything aligns naturally at 64 bits.