more than you wanted hear about pow(3M)

steven.e.sommars sesv at cbnewsc.att.com
Tue Aug 14 00:05:38 AEST 1990


In article <24645 at boulder.Colorado.EDU>, skwu at boulder.Colorado.EDU (WU SHI-KUEI) writes:
> For us ignorami, what does an error of "190 ulps" mean?  Thank you.


An ulp is a Unit in the Last Place, roughly the amount a floating point
number changes if the least significant bit is flipped.  For IEEE
double precision, this can be computed by
                  logb(x)-52
	ulp(x) = 2
where logb(x), an IEEE754 recommended function, is the unbiased
exponent of x.  For normalized numbers, an IEEE dp ulp is
in the range:
          -52                       -53
        2     * x    >= ulp(x) >= 2     * x
[Attn. nitpickers: I have intentionally omitted details of denormalized 
numbers, ulp(powers of the radix), etc.]

If we have an approximation, F(y), to a function whose true
value at y is f(y), then 
	error in ulps =   (f(y) - F(y))
			  -------------
			    ulp(f(y))
[The choice in sign of error, (F-f) versus (f-F), is somewhat arbitrary.]

An ulp is a measure of relative error, not absolute.  A
single precision function with maximum error of 1 ulp is 
not more accurate than a double precision function with
maximum error of 3 ulps.

Ulps are not hard to use.  Let's say that the *true* result, T,
of a computation is about 3.3, or when expressed in IEEE dp hex,
	T = 400AA3D70A3D70A4 [4E2...]   
The extra hex digits in [] won't fit into a IEEE word.
The ulp error depends on the approximation.
		approx		   error in ulps
	    400AA3D70A3D70A6	 -1.B1E   (-1.694)
	    400AA3D70A3D70A5	 -0.B1E	  (-0.694)
	    400AA3D70A3D70A4	  0.4E2   ( 0.305)
	    400AA3D70A3D70A3	  1.4E2   ( 1.305)
The best we can hope for in computing transcendentals is
a maximum error of 0.5 ulps (in round-to-nearest mode).
The value 400AA3D70A3D70A4 is the best approximation to T,
it has the smallest roundoff error.


	Steve Sommars
	sesv at cbnewsc.att.com
		



More information about the Comp.lang.c mailing list