[6226] in Athena Bugs

home help back first fref pref prev next nref lref last post

Re: vax 7.1H: f77

daemon@ATHENA.MIT.EDU (Ezra Peisach)
Tue Oct 16 14:59:08 1990

To: Mark Rosenstein <mar@MIT.EDU>
Cc: bugs@ATHENA.MIT.EDU
In-Reply-To: [6224] 
In-Reply-To: Your message of Tue, 16 Oct 90 14:55:37 -0400.
Date: Tue, 16 Oct 90 14:58:54 EDT
From: Ezra Peisach <epeisach@ATHENA.MIT.EDU>


From an IEEE man page:

          The pow function returns NaN if x or y is NaN.  When both x and y
          are zero, 1.0 is returned.  When x is negative and y is not an
          integer, NaN is returned.  If x is zero and y is negative,
          -HUGE_VAL is returned.


From the vax man page on pow:

     Pow(x,0) returns x**0 = 1 for all x including x = 0, Infin-
     ity (not found on a VAX), and NaN (the reserved operand on a
     VAX).  Previous implementations of pow may have defined x**0
     to be undefined in some or all of these cases.  Here are
     reasons for returning x**0 = 1 always:

     (1) Any program that already tests whether x is zero (or
         infinite or NaN) before computing x**0 cannot care
         whether 0**0 = 1 or not. Any program that depends upon
         0**0 to be invalid is dubious anyway since that
         expression's meaning and, if invalid, its consequences
         vary from one computer system to another.

     (2) Some Algebra texts (e.g. Sigler's) define x**0 = 1 for
         all x, including x = 0.  This is compatible with the
         convention that accepts a[0] as the value of polynomial
         p(x) = a[0]*x**0 + a[1]*x**1 + a[2]*x**2 +...+ a[n]*x**n
         at x = 0 rather than reject a[0]*0**0 as invalid.

     (3) Analysts will accept 0**0 = 1 despite that x**y can
         approach anything or nothing as x and y approach 0
         independently.  The reason for setting 0**0 = 1 anyway
         is this:

         If x(z) and y(z) are any functions analytic (expandable
         in power series) in z around z = 0, and if there x(0) =
         y(0) = 0, then x(z)**y(z) -> 1 as z -> 0.

     (4) If 0**0 = 1, then infinity**0 = 1/0**0 = 1 too; and then
         NaN**0 = 1 too because x**0 = 1 for all finite and
         infinite x, i.e., independently of x.

home help back first fref pref prev next nref lref last post