You could (and should) always check your macros with a proper compiler, e.g. by compiling them from the interpreter.
 .L macro.C+
You expect you should get the same answer because you assume that 1./10=0.1. This is not true for double types (that’s the type of 10. and 0.1). While 10.0 can be exactly represented as a double, 0.1 cannot (try in the interpreter). That’s why in the second form you incur rounding errors (in the ROOT interpreter like in any C or C++ code).
[quote]I have a problem with ROOT. It doesn’t always see typos and missing “;”.[/quote] How do you expect ROOT to KNOW that something YOU wrote is a “typo” or that YOU forgot to put a “;” somewhere there?
The interpreter is expected to execute the source code EXACTLY as YOU wrote it.
BTW. I see no problem with “rounding errors” here …
root  (1 / 10.0) - 0.1
root  (1.0 / 10) - 0.1
root  0.1 * 10.0