Another chapter in the NeXT Tanh bug saga!
- To: mathgroup at yoda.ncsa.uiuc.edu, swolf
- Subject: Another chapter in the NeXT Tanh bug saga!
- From: CAMERON at midd.cc.middlebury.edu
- Date: Mon, 4 Mar 91 01:37 EST
Well! I've found another interesting piece of the Tanh[] puzzle!
Stephen Wolfram made a posting implying that the Tanh bug
was NeXT's fault:
> printf("%g %g\n", tanh(-1.73287), tanh(-1.73288));
>
> in a minimal C program on a NeXT under OS version 2.0 shows a
> discontinuity.
>
> Mathematica (apparently mistakenly) relies on built-in math functions.
>
> Stephen Wolfram <swolf at dragonfly.wri.com>
As you will see, that word "minimal" is STRICTLY true.
The following is a transcript of a brief test I ran on my NeXT.
I have NeXT's 2.0 operating system, and an '030 processor.
(Heorot is the machine's name.)
Heorot (104) > cat testmath1.c
#include <math.h>
main()
{
printf("%g %g\n", tanh(-1.73287), tanh(-1.73288));
}
Heorot (105) > make testmath1
cc testmath1.c -o testmath1
Heorot (106) > testmath1
-0.939394 -0.939395
Heorot (107) > cat testmath2.c
main()
{
printf("%g %g\n", tanh(-1.73287), tanh(-1.73288));
}
Heorot (108) > make testmath2
cc testmath2.c -o testmath2
Heorot (109) > testmath2
-0.939394 -1.73288
Did you see it? If I compile the program WITH the #include
line, then tanh works just fine! But if I compile without the
#include line (a "minimal" program?) the promised discontinuity
appears!
I have no idea why this happens, but since the man page for
tanh does say that you must "#include <math.h>" when you use
this function, I am revising my blame conjecture and guessing
that somebody at WRI left out an #include line from a source
file, and that's what's causing the problem.
Further info from WRI representatives would be welcome!
Now I wonder why Mma doesn't misbehave on my system,
seeing that the C program does.
--Cameron Smith
Still baffled Mma consultant
cameron at midd.cc.middlebury.edu
>From CAMERON%midd.cc.middlebury.edu at mitvma.mit.edu Mon Mar 4 00:58:30 1991
Received: from MITVMA.MIT.EDU by dragonfly.wri.com with SMTP id AA18149
(5.65+/IDA-1.3.4 for cat >> /users/swolf/Mail/incoming); Mon, 4 Mar 91 00:58:30 -0600
Received: from MITVMA.MIT.EDU by mitvma.mit.edu (IBM VM SMTP R1.2.1MX) with BSMTP id 3909; Mon, 04 Mar 91 01:57:28 EST
Received: from MIDD.CC.MIDDLEBURY.EDU (CAMERON) by MITVMA.MIT.EDU (Mailer
R2.05) with BSMTP id 4394; Mon, 04 Mar 91 01:57:28 EST
Date: Mon, 4 Mar 91 01:42 EST
From: CAMERON at midd.cc.middlebury.edu
Subject: Addendum to "Another chapter..."
To: mathgroup at yoda.ncsa.uiuc.edu, swolf at dragonfly.wri.com
Message-Id: <AEB5644B91DF009794 at MIDD.CC.MIDDLEBURY.EDU>
X-Envelope-To: swolf at dragonfly.wri.com
X-Vms-To: IN%"mathgroup at yoda.ncsa.uiuc.edu"
X-Vms-Cc: IN%"swolf at dragonfly.wri.com",CAMERON
I forgot to mention in the previous posting: I repeated
the tests with and without the compiler's -O flag,
with and without stripped executables, with and without
the -object option, etc., and found nothing other than
the use/nonuse of #include that changed the behavior
of the program. Just thought I'd be complete -- I have
no idea what might or might not affect this sort of thing.
--CS
>From mathgroup-adm at yoda.ncsa.uiuc.edu Mon Mar 4 01:19:46 1991
Received: from yoda.ncsa.uiuc.edu by dragonfly.wri.com with SMTP id AA18201
(5.65+/IDA-1.3.4 for cat >> /users/swolf/Mail/incoming); Mon, 4 Mar 91 01:19:46 -0600
Received: by yoda.ncsa.uiuc.edu id AA20190
(5.64+/IDA-1.3.4 for ); Sun, 3 Mar 91 23:10:22 -0600
Received: by yoda.ncsa.uiuc.edu id AA20186
(5.64+/IDA-1.3.4 for /usr/lib/sendmail -odq -oi -fmathgroup-adm at yoda.ncsa.uiuc.edu mathgroup-out); Sun, 3 Mar 91 23:10:20 -0600
Message-Id: <9103040510.AA20186 at yoda.ncsa.uiuc.edu>
From: madler at kanga.caltech.edu (Mark Adler)
Subject: Re: Tanh
Date: Mon, 4 Mar 91 05:02:34 GMT
To: mathgroup at yoda.ncsa.uiuc.edu
In article <9103030700.AA19440 at yoda.ncsa.uiuc.edu> swolf at dragonfly.wri.com (Stephen Wolfram) writes:
>printf("%g %g\n", tanh(-1.73287), tanh(-1.73288));
>
>in a minimal C program on a NeXT under OS version 2.0 shows a
>discontinuity.
>
>Mathematica (apparently mistakenly) relies on built-in math functions.
>
>Stephen Wolfram <swolf at dragonfly.wri.com>
On a 68030 NeXT running 2.0, the result of the above program is:
-0.939394 -0.939395
(correct), while on a 68040 NeXT running the very same binary executable
gives (incorrectly):
-0.939394 -1.060605
Note that on the 68040, all the transcendental functions are done in
software. This means that you do not have to get your 68040 replaced
to fix this--just a small software upgrade.
That is not the only problem with 68040 math--I've seen the NeXT
completely lock up as a result of simple calculation. I'm hoping all
of this will be fixed very soon. As it stands, I have no confidence
in any numerical results from my recently upgraded NeXT.
Mark Adler
madler at pooh.caltech.edu