I was intrigued to discover that Maple evaluates
5/6.0 and 5*6.0^(-1)
to ﬂoating-point numbers that diﬀer by 2 units in the last decimal place. The on-line help for arithmetic operations states that
a/b is of type ‘*‘ with operands a and b^(-1)
but evidently this does not tell the whole story.
I am guessing that Maple evaluates 5/6.0 by invoking some built-in algorithm for ﬂoating-point division, while Maple evaluates 5*6.0^(-1) by ﬁrst ﬁnding a ﬂoating-point approximation to 1/6, and then multiplying by 5. Is this a correct conjecture?
An amusing corollary of this phenomenon is that Maple’s ﬂoating-point evaluation is ”non-commutative”: for example, Maple evaluates
5/6.0 and 5.0/6
to diﬀerent results.
What are the precise circumstances under which Maple does treat a/b and a*b^(-1) as equal?
Looks right to me. Actually this is happening during the preliminary ”simpliﬁcation” which is performed on all Maple input before any evaluation takes place. Thus if you do this with variables, there is no diﬀerence:
In general ﬂoating-point computation is non-commutative. The simplest example is that A + B - A returns 0 when A is much larger than B. Mind you, that _won’t_ necessarily be true if the automatic simpliﬁer is allowed to do its magic:
> 1.0e17 + 1 - 1.0e17; 0