[Rd] chisq.test() and r2dtable() freezing on certain inputs (PR#5701)

maechler at stat.math.ethz.ch maechler at stat.math.ethz.ch
Sat Dec 13 17:47:56 MET 2003


>>>>> "MM" == Martin Maechler <maechler at stat.math.ethz.ch>
>>>>>     on Thu, 11 Dec 2003 18:29:05 +0100 (CET) writes:

>>>>> "Torsten" == Torsten Hothorn <torsten at hothorn.de>
>>>>>     on Thu, 11 Dec 2003 18:03:07 +0100 (CET) writes:

    Torsten> On Thu, 11 Dec 2003, Jeffrey Chang wrote:
    >>> Hello everybody,
    >>> 
    >>> I'm running R 1.8.1 on both Linux and OS X compiled with
    >>> gcc 3.2.2 and 3.3, respectively.  The following call
    >>> seems to freeze the interpreter on both systems: >
    >>> chisq.test(matrix(c(233, 580104, 3776, 5786104), 2, 2),
    >>> simulate.p.value=TRUE)
    >>> 
    >>> By freeze, I mean, the function call never returns
    >>> (running > 10 hours so far), the process is unresponsive
    >>> to SIGINT (but I call kill it with TERM), and the
    >>> process still consumes cycles on the CPU.
    >>> 

    Torsten> This is due to calling `exp' with a very small
    Torsten> value leading to a zero return value in rcont2
    Torsten> (src/appl/rcont.c) line 70:

    MM> yes, that's correct.

However, as I have found out now, the real reason *is* integer
overflow (in multiplication), as I had guessed originally (but
didn't believe anymore for a while after your exp() underflow diagnosis).
Note that this also affects  r2dtable(), and e.g., the following
gives a segmentation fault:

M <- 50000 ; r2dtable(1, c(2*M,3), M+1:2)

Further, even if I protect against the exp() underflow, I can
still see examples which "freeze", i.e. end in an infinite loop.

-------

The fix is to ensure that integer multiplications i * j  do not happen
but rather    i * (double) j

I will commit a fix to R-patched and R-devel later this evening.

-- 
Martin Maechler <maechler at stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum  LEO C16	Leonhardstr. 27
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1228			<><



More information about the R-devel mailing list