On Mon, 24 Aug 2015 18:06:07 +0000, rumbu wrote: > BTW, 1.2 and 12.0 are directly representable as double > > In C++: > > printf("%.20f\r\n", 1.2); > printf("%.20f\r\n", 12.0); > > will output: > > 1.20000000000000000000 12.00000000000000000000 > > Either upcasting to real is the wrong decision here, either the writeln > string conversion is wrong.
No it's not, this must be some sort of constant-folding or precision increase. $ cat test.c #include "stdio.h" int main(int nargs, char** args) { double x = 1.2; printf("%.20f\n", x); } $ clang test.c && ./a.out 1.19999999999999995559