12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /****************************************************************
- The author of this software is David M. Gay.
- Copyright (C) 1998, 1999 by Lucent Technologies
- All Rights Reserved
- Permission to use, copy, modify, and distribute this software and
- its documentation for any purpose and without fee is hereby
- granted, provided that the above copyright notice appear in all
- copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of Lucent or any of its entities
- not be used in advertising or publicity pertaining to
- distribution of the software without specific, written prior
- permission.
- LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
- IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
- SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
- IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- THIS SOFTWARE.
- ****************************************************************/
- /* Please send bug reports to David M. Gay (dmg at acm dot org,
- * with " at " changed at "@" and " dot " changed to "."). */
- #include "gdtoaimp.h"
- double
- ulp
- #ifdef KR_headers
- (x) U *x;
- #else
- (U *x)
- #endif
- {
- Long L;
- U a;
- L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
- #ifndef Sudden_Underflow
- if (L > 0) {
- #endif
- #ifdef IBM
- L |= Exp_msk1 >> 4;
- #endif
- word0(&a) = L;
- word1(&a) = 0;
- #ifndef Sudden_Underflow
- }
- else {
- L = -L >> Exp_shift;
- if (L < Exp_shift) {
- word0(&a) = 0x80000 >> L;
- word1(&a) = 0;
- }
- else {
- word0(&a) = 0;
- L -= Exp_shift;
- word1(&a) = L >= 31 ? 1 : 1 << (31 - L);
- }
- }
- #endif
- return dval(&a);
- }
|