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

Re: Motion P1788/M0015.01: Definition_of_decorations: Up for discussion



> Subject: Re: Motion P1788/M0015.01: Definition_of_decorations: Up for discussion
> From: John Pryce <j.d.pryce@xxxxxxxxxxxx>
> Date: Wed, 28 Apr 2010 10:15:59 +0100
> To: stds-1788 <stds-1788@xxxxxxxxxxxxxxxxx>
> 
> P1788
> 
> Note an immediate consequence of passing Dan's motion:
> 
>    We abolish the "bounded" property.
> 
> (Hurrah, say I.) Two reasons:
> 
> (a) It is not a pointwise property such as Motion 15 requires.
> That is, there is no predicate isBounded(f,x) or isBounded(f,x,y)
> that is defined for functions f, and points x (or x,y) in an
> interval, such that we ask if there exists x in xx such that
> isBounded(f,x) is true, etc. 
> "Bounded" can only be defined by a doubly quantified statement
> (there exists ...)(for all ...)... and hence its negation by
> (for all ...)(there exists ...)...
> 
> (b) It is a property of the current interval, not of history.
> Or should we set boundedSticky(xx)=false for xx=[-1,1] because
> it happens to have been computed as tanh(Entire) ?
> 
> Regards
> 
> John
> 

	Well, abolishing 'bounded' was neither my intention nor
	something that follows for me from motion 15.

	However, the form of 'bounded' that I am considering is
	sufficiently different from that which has been discussed
	that you might consider it abolished.

	This is an argument I was going to save for a future
	motion but since the issue has been raised, let me outline
	it for now so as not to cloud the issue about motion 15.

	Let me use an example I recently used in a private note.


	In double precision floating-point the overflow threshold
	for exp(x) happens around 709.78.  That is, exp(709) &
	anything smaller is some finite representable number around
	maxPos or smaller.  But exp(710) or larger rounds to +oo as
	the 'nearest' representable answer (or to maxPos, depending
	on the rounding direction).

	Now, let's take a very strict interpretation for the word
	'bounded'.  That being that a bound can be (or has been)
	computed.  Then 'unbounded' means that situation that exists
	when this is not true.  Not that the answer is infinity.
	Just that no bound is known.

	The definitions of the 'bounded' properties then become

		boundedTrue = {there exists x in xx such that the
			nearest representable number for f(x) is
			finite in the current working precision.
			That is, that the 754 isBounded(f(x)) is
			true.}

		boundedFalse = {there exists x in xx such that the
			nearest representable number for f(x) is NOT
			finite in the current working precision.
			That is, that the 754 isBounded(f(x)) is
			false.}
 
 		boundedSticky =
 			boundedFalse(xx) \or boundedSticky(xx)

	Now, I grant you that this definition doesn't live entirely
	at level 1.  It lives at the mapping between level 1 & level
	2.  As such, just where this property is true depends both
	on the nature of the function & the range of the working
	precision being used.  But there are predicates isBounded
	computable for each of our functions for each available
	working precision.  They are the ordinary 754 predicates for
	isBounded when applied to the value of f(x).  And, it is
	still a property that can be unambiguiously determined for
	all our functions for all our working precisions.

	Also, failure of isBounded to be true is tracked by the
	decoration boundedSticky.  While that property is often not
	a property of the final result, knowing that it has happened
	along the way is a clue that our final result may not be
	accurately computed in this precision.  Perhaps a higher
	precision is needed to adequately bound that result.

	OK, given that, how might we decorate the following interval
	valued results?

		exp([0,700]) = {[1,reallyBig],{boundedTrue}} because
			its all bounded.

		exp([600,800]) = {[sosoBig,+oo],{boundedTrue,boundedFalse}}
			because some of it is bounded & some is not.

		exp([800,1000]) = {[maxPos,+oo],{boundedFalse}} because
			all of it is unbounded.

	As for whether that turns out to be something useful enough
	to rise to the level of something to be tracked with its own
	decoration, well, we have to figure that out still.

	It looks promising to me, though.

	But let me remind you once again that, while this is related
	to motion 15, it is not a motion 15 issue.  Motion 15 does
	not depend on whether you like this definition of 'bounded'
	or not.  That is an issue for a future motion.


				Dan


	P.S. - Oh, as for the issue of whether or not boundedSticky
	should be set for tanh([entire]), well that kind of depends
	on how we got there which is kind of what decorations are
	all about.

	First, something that is mentioned in motion 15 near the end,
	I believe all constructor functions should set their 'sticky's
	to False & set their other decorations according to whether
	or not they are True for the identity function.  So I would
	set the following on creation:

		Entire = constructInterval(-oo,+oo)
			= {[-oo,+oo],{boundedTrue,boundedFalse}}

		mostOfIt = constructInterval(-bigEnough,+bigEnough)
			= {[-bigEnough,+bigEnough],{boundedTrue}}

	And, if bigEnough is big enough to have tanh(bigEnough) = 1
	in our working precision we have that:

		tanh(Entire) = {[-1,1],{boundedTrue,boundedSticky}}

		tanh(mostOfIt) = {[-1,1],{boundedTrue}}

	So, like I said, it kind of depends on how you got there.

	Both are obviously bounded final results but one used an
	unbounded interval to get there.

	And boundedSticky records that.

	Nothing ominous in this case.  But telling you that it
	happened is the sticky's job.