[6226] in Athena Bugs
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.