🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: net.math.stat
Article #127

S and NaN on SUNs

#127
From: Allan Wilks
Date: Thu, 05 Dec 1985 01:14
51 lines
2589 bytes
There is a problem using the S statistical system with IEEE floating
point arithmetic on a SUN workstation with release 2.0 of the SUN
software.  People with other kinds of machines need not be concerned.

The problem was pointed out by Steve Peters at MIT:
computations that in the old days would fail due to
a floating point exception will now sometimes silently return NaN.
This is fine, provided that in succeeding computations, S is able
to recognize those NaNs.  It fails to do so, however, because of the
way NAs are implemented in S, viz, a single, hardwired 32-bit pattern is chosen 
for representing NA, and the choice is made in such a way that the pattern
is unlikely to appear either as an integer or as a (single-precision)
float.  All tests for NA go through the single routine $P/natst.r
which simply tests its input (32-bit) argument against the fixed NA
pattern.  This will not work for the current problem as there are
many possible IEEE NANs.  So here is $P/natst.C to replace $P/natst.r:

===============================================
SUPPORT(natst,		test for missing value)
/*
 * Version of natst for IEEE floating point.
 * Tests whether the bit pattern of the input
 * matches one of the bit patterns for NaN,
 * while avoiding a match with small integers.
 */
F77_SUB(natst)(i)
long *i;
{
	int a, b;

	a = (*i & 0x7f000000) == 0x7f000000;
	b = (*i & 0xff800000) == 0xff800000;
	return(a & !b);
}
===============================================

It is a little tricky because many NaNs look like small negative
integers when treated as integers, but this routine should work
pretty reliably.  To use it, install it in $P, move natst.r to
some other file, and as user s do:
	cd $P
	S MAKE natst.o
	ar r $L/psl natst.o
	ranlib $L/psl
To remake an S executive:
	cd $M
	S MAKE NEW.S INSTALL
External functions should also be remade.
Send me mail if you have problems, or if you can think of a better
way to cut through this murk.  Also, please note that this doesn't
seem to be a problem with S under other IEEE implementations.
Technical Details
Message-ID: <4653@alice.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!watmath!clyde!burl!ulysses!allegra!alice!allan

Show Full Headers
Complete Article Headers
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site alice.UUCP
Path: arc1-ca.pugleaf.net!utzoo!watmath!clyde!burl!ulysses!allegra!alice!allan
From: allan@alice.UucP (Allan Wilks)
Newsgroups: net.math.stat
Subject: S and NaN on SUNs
Message-ID: <4653@alice.UUCP>
Date: Wed, 4-Dec-85 20:14:28 EST
Article-I.D.: alice.4653
Posted: Wed Dec  4 20:14:28 1985
Date-Received: Thu, 5-Dec-85 09:06:46 EST
Organization: Bell Labs, Murray Hill
Lines: 52