I want to circle back and complete the relationship, if any, between the specifications of
computations procedures and mathematics.
First, there is no prohibition between defining any number of algorithms as computations on
computerrepresentations of numbers. Mathematics allows all sort of functions, including
ones that rules can't be written down for. And computational algorithms are some of those
that do have writtendown rules that can be followed by a computer.
The problem that is being seen here is what happens when (1) mathematicallydefined functions
are appealed to as the ideal that the computed procedure is intended to approach in some agreeable
degree of approximation. This shows up in the description that is provided and in the notation
and names that are used.
When the computational functions are casually identified with mathematical ones and nothing
more is said, what's left hanging are two things: (1) anything about *mathematical* edge cases
and places where the mathematical function is undefined, and (2) difficulties where limitations
of the computer representation of arithmetic prevent a result with some expected degree of
reliability. (1) can be finessed by providing computationallyconvenient results for edge
cases, and a mathematicallyprecise definition can be provided in definition for the resulting
modification. If a standard dictates such a definition, so be it.
The POWER(x,y) computational function specified for OpenFormula is not the mathematical one
anyhow. It is an approximation (sometimes quite good) for some limited cases of the mathematicallyallowed
(x,y). It can be defined to be a (limited) variant covering places where mathematics has
nothing to offer, so long as there is agreement on what the variant is.
 Dennis
Original Message
From: Dennis E. Hamilton [mailto:dennis.hamilton@acm.org]
Sent: Monday, February 11, 2013 14:24
To: dev@openoffice.apache.org
Subject: RE: Calc behavior: result of 0 ^ 0
This is not a vote. There is a statement about what is acceptable mathematically that I cannot
leave unchallenged. However, that is different than what might or might not be acceptable
computationally for a give case and I continue to refrain from reiterating any argument about
that.
 Dennis
MATHEMATICAL RIGHT/WRONGNESS
I'm sorry, I will not accept that 0^0 = 1 as a definition is "not wrong mathematically."
It is not right mathematically either. That it is convenient to assume 0^0 = 1 in certain
contexts of mathematical *application* is different than making it part of the laws of number
theory.
The problem with 0^0 = 1 as a rule is that it has as a consequence that 0/0 = 1 as well or
else standard mathematics is inconsistent. But 0/0 = 1 (or any fixed value) makes mathematics
unavoidably inconsistent anyhow (as the wellknown defective proofs used to claim paradoxes
like 0 = 1 and 1 = 2 demonstrate). There is no escaping the fact that x/0 needs to be undefined
and that includes 0/0, so 0^0 needs to go along.
Let us not confuse computational expedient or algorithmic simplicity with mathematical rigor.
When a computer arithmetic had no provision for coding errors and indefinable cases, computational
concessions were unavoidable (as is the case for integer types in common programming languages).
That is not the case with spreadsheets, which do include error values, nor is it the case
with modern floatingpoint arithmetic implementations (and the standards they satisfy).
I understand Knuth's argument (and its form in "Concrete Mathematics" and in "Art of Computer
Programming"). But adding rules to *mathematics* that make the standard model of arithmetic
inconsistent is not mathematically justifiable. It is very handy, in certain contexts relying
on mathematical definitions, to define the x^0 case to always be 1 regardless of x. In the
case of the binomial theorem, it appears to be an appropriate simplification in providing
algorithms that are "easier" to reason about in some respect. That context is specifically
(a+b)^n by polynomial expansion and in this context the particular case of n = 0 and b = a
is perhaps not all that interesting in comparison to the serious cases.
Unfortunately, the computation, POWER(x,0) has no mathematical context. It is not known what
POWER(x,0) is being used for, and what the nature of x is.
Although the standards for C and C++ have division by 0 to be undefined, there is not such
clarity for pow(x,y). The ANSI/ISO Standards for C thought of as C90 define pow(x,y) to be
a domain error if the "result cannot be represented when x is zero and y is less than or equal
to zero." Even so, Plauger's 1992 "The Standard C Library" has pow(x,0.0) return 1.0 so long
as x is neither NaN nor an Inf. Harbison and Steele's "C: A Reference Manual", 4th (1995)
edition simply assert that pow(0.0,0.0) is a domain error. The ISO C99 specification says
that "a domain error *may* occur if x is xero and y is less than or equal to zero [emphasis
mine]." The C++ library, for noncomplex x or y, has pow(x,y) be as defined for C (without
reference to any details) and <math.h>, at least in the 1999 book on "The C++ Standard
Library." By ISO C++ 2003, pow(0,0) is implementation defined. Of course none of this is
about mathematics. It is about constraints on the definitions of computer software libraries
and the compromises that are made in order to find agreement on standards. People vote on
those. Mathematics is not defined at the ballot box (and legislation of the value of pi is
not mathematics [QED]).
[ ... ]
