Thread Links Date Links
Thread Prev Thread Next Thread Index Date Prev Date Next Date Index

Re: Table 4 proposal version 0.2...



> Date: Fri, 23 Mar 2012 15:03:11 +0100
> From: Vincent Lefevre <vincent@xxxxxxxxxx>
> To: stds-1788 <stds-1788@xxxxxxxxxxxxxxxxx>
> Subject: Re: Table 4 proposal version 0.2...
> 
> On 2012-03-22 17:17:28 -0400, Michel Hack wrote:
> > The problem here is that the 754 representations of Zero, Infinity
> > (and also NaN) are overloaded.
> 
> and +1, because
> 
>   powr (+1, ±inf) signals the invalid operation exception.
> 
> because +1 is regarded here as a potentially inexact number
> (contrary to the usual exact inputs).
> 
> > For results, the flags can be used to distinguish the meanings, but
> > inputs are considered exact by definition.
> 
> Not in the above particular case, where +1 is considered inexact.
> 
> -- 
> Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <http://www.vinc17.net/>
> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


	Vincent,

	While it is true that powr(+1,+inf) signals invalid,
	it is not true that this is because +1 is considered
	inexact in any way.

	When we were defining the power functions, we could
	not agree in the several slightly different definitions
	for these functions.  Our only way out (as a committee)
	was to define them all & deal with their slightly
	different exceptions.

	The pown(x,n) = x^n function was defined such that the
	second operand is an integer & the result is effectively
	arrived at via repeated multiplication.  (Not actually,
	but that is the metaphor.)  The case 1^+oo does not
	arise because +oo is not within bounded integers.

	The pow(x,y) = x^y (with the second parameter a floating-
	point number) was defined as if it were the analytic
	continuation of the x^n function into the Reals.  In this
	case we have:

		pow (+1,y) is 1 for any y (even a quiet NaN).

	So 1^+oo = 1 with no exceptions.

	Only in the powr(x,y) = exp(y*ln(x)) case do we have a
	problem.  In this case:

		powr(+1,+/-inf) signals the invalid exception

	because y*ln(x) = inf*0 which is itself invalid.

	Not because there is any inexactitude in the value of 1.


				Dan