Roman Kononov wrote:
> On 12/27/2006 12:44 PM, Bruce Momjian wrote:
> > The only unsolved issue is the one with underflow checks.  I have added
> > comments explaining the problem in case someone ever figures out how to
> > address it.
> 
> This will behave better for float4:
> 
>     Datum float4pl(PG_FUNCTION_ARGS)
>     {
> ---    float4  arg1 = PG_GETARG_FLOAT4(0);
> ---    float4  arg2 = PG_GETARG_FLOAT4(1);
> +++    double  arg1 = PG_GETARG_FLOAT4(0);
> +++    double  arg2 = PG_GETARG_FLOAT4(1);
>         double  result;
> 
>         result = arg1 + arg2;
>         CheckFloat4Val(result,isinf(arg1) || isinf(arg2));
>         PG_RETURN_FLOAT4((float4) result);
> }

Are you sure?  As I remember, computation automatically upgrades to
'double'.  See this program and output:

        $ cat tst1.c
        #include <stdio.h>
        #include <stdlib.h>
        
        int
        main(int argc, char *argv[])
        {
                float a = 1e30, b = 1e30;
                double c;
        
                c = a * b;
        
                printf("%e\n", c);
                return 0;
        }

        $  tst1
        1.000000e+60

-- 
  Bruce Momjian   [EMAIL PROTECTED]
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to