Re: [HACKERS] Divide by zero error on SPARC/Linux.

From: Keith Parks <emkxp01(at)mtcc(dot)demon(dot)co(dot)uk>
To: maillist(at)candle(dot)pha(dot)pa(dot)us
Cc: hackers(at)postgresql(dot)org
Subject: Re: [HACKERS] Divide by zero error on SPARC/Linux.
Date: 1998-06-22 22:52:26
Message-ID: 199806222252.XAA28886@mtcc.demon.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Bruce,

That's what I would have half expected too but am I actually using
any floating point arithmetic?

The function called is int4div() which simply does a, return (arg1/arg2),
so I would have expected integer arithmetic.

If I cast to float I get:-

postgres=> select 1::float8/0::float8;
ERROR: float8div: divide by zero error
postgres=>

The error coming courtesy of :-

if (*arg2 == 0.0)
elog(ERROR, "float8div: divide by zero error");

in backend/utils/adt/float.c:604

I'm still puzzled but lean towards a signal problem too.

I do get FP exceptions as there's one in the float8.out regression
test, where there shouldn't be one!!

QUERY: SELECT '' AS bad, : (f.f1) from FLOAT8_TBL f;
ERROR: floating point exception! The last floating point operation either
exceeded legal ranges or was a divide by zero
QUERY: SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
ERROR: float8div: divide by zero error

Keith.

Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
> >
> > Hi All,
> >
> > In the latest CVS I can get the backend to terminate quite
> > easily with a divide by 0.
> >
> > postgres=> select 1/0;
> > pqReadData() -- backend closed the channel unexpectedly.
> > This probably means the backend terminated abnormally before or
while
> > processing the request.
> > We have lost the connection to the backend, so further processing is
impossible.
> > Terminating.
> > [postgres(at)sparclinux pgsql]$
> >
> > A bt on the core shows:-
> >
> > I don't know if this is recently introduced behaviour or if
> > it's platform dependant. I can't recall trying this before
> > so maybe it's always happened on S/Linux.
> >
> > My immediate thought is to include a check for divide by 0
> > in the intXXdiv() functions and do something like an elog(WARN,...)
> >
> > Firstly, what do other people get on their platform?
>
> I get:
>
> ttest=> select 1/0;
> ERROR: floating point exception! The last floating point operation
> either exceeded legal ranges or was a divide by zero
>
> so it looks like the signal. Check these lines:
>
> #$ gid FloatExceptionHandler
> backend/postmaster/postmaster.c:1247: pqsignal(SIGFPE,
FloatExceptionHandler);
> backend/tcop/postgres.c:772: FloatExceptionHandler(SIGNAL_ARGS)
> include/tcop/tcopprot.h:37: extern void FloatExceptionHandler(SIGNAL_ARGS);
>

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message De Clarke 1998-06-22 23:02:00 SQL queries accessing tables in more than one db
Previous Message Bruce Momjian 1998-06-22 21:07:47 Re: [HACKERS] Divide by zero error on SPARC/Linux.