• Tom Lane's avatar
    Fix FPeq() and friends to get the right answers for infinities. · 8597a48d
    Tom Lane authored
    "FPeq(infinity, infinity)" returned false, on account of getting NaN
    when it subtracts the two inputs.  Fix that by adding a separate
    check for exact equality.
    
    FPle() and FPge() similarly got the wrong answer for two like-signed
    infinities.  In those cases, we can just rearrange the comparisons
    to avoid potentially subtracting infinities.
    
    While the sibling functions FPne() etc accidentally gave the right
    answers even with the internal NaN results, it seems best to make
    similar adjustments to them to avoid depending on this.
    
    FPeq() has to be converted to an inline function to avoid double
    evaluations of its arguments, and I did the same for the others
    just for consistency.
    
    In passing, make the handling of NaN cases in line_eq() and
    point_eq_point() simpler and easier to reason about, and perhaps
    faster.
    
    This results in just one visible regression test change: slope()
    now gives DBL_MAX for two inputs of (inf,1e300), which is consistent
    with what it does for (1e300,inf), so that seems like a bug fix.
    
    Discussion: https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com
    8597a48d
geo_ops.c 123 KB