The last point in your intro description can't be stressed enough: this allows for safe handling of rounding errors in floating point operations.
Though you are inherently losing precision: there are values in the output interval which don't have a corresponding input that causes this output.