in reply to shocking imprecision

print rounds (to 6 positions, I think?), but int truncates. You can use sprintf('%.6f', EXPR) to round without printing.

By the way, the impression is not related to the magnitude of the numbers. The problem is that 38/100 is a periodic number in binary like 1/3 is a periodic number in decimal. It would take infinite storage to store it as a floating point number.