**Describe the bug**
It's not possible to compare Decimal and Float values. But actually both of them point to some specific value on real number line, so we can compare and that wouldn't produce any precision loss.

**How to reproduce**
Clickhouse 21.5
```
SELECT toDecimal32('11.00', 2) > 1.

Query id: f2c1cba1-748e-42ea-83ac-e117b542d576


0 rows in set. Elapsed: 0.002 sec.

Received exception from server (version 21.5.1):
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: No operation greater between Decimal(9, 2) and Float64: While processing toDecimal32('11.00', 2) > 1..
```



Loosely related https://github.com/ClickHouse/ClickHouse/issues/5690
}
        WhichDataType which_left{left_type};
        WhichDataType which_right{right_type};
        const bool left_is_num = col_left_untyped->isNumeric();
        const bool right_is_num = col_right_untyped->isNumeric();
        const bool left_is_string = isStringOrFixedString(which_left);
        const bool right_is_string = isStringOrFixedString(which_right);
        bool date_and_datetime = (which_left.idx != which_right.idx) && (which_left.isDate() || which_left.isDate32() || which_left.isDateTime() || which_left.isDateTime64())
            && (which_right.isDate() || which_right.isDate32() || which_right.isDateTime() || which_right.isDateTime64());
        ColumnPtr res;
        if (left_is_num && right_is_num && !date_and_datetime)
        {
            if (!((res = executeNumLeftType<UInt8>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<UInt16>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<UInt32>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<UInt64>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<UInt128>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<UInt256>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<Int8>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<Int16>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<Int32>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<Int64>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<Int128>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<Int256>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<Float32>(col_left_untyped, col_right_untyped))
                || (res = executeNumLeftType<Float64>(col_left_untyped, col_right_untyped))))
                throw Exception("Illegal column " + col_left_untyped->getName()
                    + " of first argument of function " + getName(),
                    ErrorCodes::ILLEGAL_COLUMN);
            return res;