On 12/11/2017 04:57 AM, Alex Bennée wrote:
> +    if (a.cls == float_class_zero || b.cls == float_class_zero) {
> +        if (a.cls == float_class_normal) {
> +            return a.sign ? float_relation_less : float_relation_greater;
> +        } else if (b.cls == float_class_normal) {
> +            return b.sign ? float_relation_greater : float_relation_less;
> +        } else if (a.cls == b.cls) {
> +            return float_relation_equal;
> +        }
> +    }

This misses out on infinity handling, which should be like normals.
Perhaps better as

    if (a.cls == float_class_zero) {
        if (b.cls == float_class_zero) {
            return float_relation_equal;
        }
        return b.sign ? float_relation_greater : float_relation_less;
    } else if (b.cls == float_class_zero) {
        return a.sign ? float_relation_less : float_relation_greater;
    }

> +    /* The only infinity we need to explicitly worry about is
> +     * comparing two together, otherwise the max_exp/sign details are
> +     * enough to compare to normal numbers
> +     */

I don't think it's wise to rely on the contents of .exp for float_class_inf.
Really, the only valid member for that type is sign.  Better as

    if (a.cls == float_class_inf) {
        if (b.cls == float_class_inf) {
            if (a.sign == b.sign) {
                return float_relation_equal;
            }
        }
        return a.sign ? float_relation_less : float_relation_greater;
    } else if (b.cls == float_class_inf) {
        return b.sign ? float_relation_less : float_relation_greater;
    }


r~

Reply via email to