• Tomas Vondra's avatar
    Use the built-in float datatypes to implement geometric types · c4c34008
    Tomas Vondra authored
    This patch makes the geometric operators and functions use the exported
    function of the float4/float8 datatypes.  The main reason of doing so is
    to check for underflow and overflow, and to handle NaNs consciously.
    
    The float datatypes consider NaNs values to be equal and greater than
    all non-NaN values.  This change considers NaNs equal only for equality
    operators.  The placement operators, contains, overlaps, left/right of
    etc. continue to return false when NaNs are involved.  We don't need
    to worry about them being considered greater than any-NaN because there
    aren't any basic comparison operators like less/greater than for the
    geometric datatypes.
    
    The changes may be summarised as:
    
    * Check for underflow, overflow and division by zero
    * Consider NaN values to be equal
    * Return NULL when the distance is NaN for all closest point operators
    * Favour not-NaN over NaN where it makes sense
    
    The patch also replaces all occurrences of "double" as "float8".  They
    are the same, but were used inconsistently in the same file.
    
    Author: Emre Hasegeli
    Reviewed-by: Kyotaro Horiguchi, Tomas Vondra
    
    Discussion: https://www.postgresql.org/message-id/CAE2gYzxF7-5djV6-cEvqQu-fNsnt%3DEqbOURx7ZDg%2BVv6ZMTWbg%40mail.gmail.com
    c4c34008
geo_decls.h 5.64 KB