it's unclear whether compilers which provide pure imaginary types
might produce a pure imaginary expression for 1.0fi. using 0.0f+1.0fi
ensures that the result is explicitly complex and makes this obvious
to human readers too.
#define complex _Complex
#ifdef __GNUC__
-#define _Complex_I (__extension__ 1.0fi)
+#define _Complex_I (__extension__ (0.0f+1.0fi))
#else
-#define _Complex_I 1.0fi
+#define _Complex_I (0.0f+1.0fi)
#endif
#define I _Complex_I