1 |
|
|
/**************************************************************** |
2 |
|
|
|
3 |
|
|
The author of this software is David M. Gay. |
4 |
|
|
|
5 |
|
|
Copyright (C) 1998, 1999 by Lucent Technologies |
6 |
|
|
All Rights Reserved |
7 |
|
|
|
8 |
|
|
Permission to use, copy, modify, and distribute this software and |
9 |
|
|
its documentation for any purpose and without fee is hereby |
10 |
|
|
granted, provided that the above copyright notice appear in all |
11 |
|
|
copies and that both that the copyright notice and this |
12 |
|
|
permission notice and warranty disclaimer appear in supporting |
13 |
|
|
documentation, and that the name of Lucent or any of its entities |
14 |
|
|
not be used in advertising or publicity pertaining to |
15 |
|
|
distribution of the software without specific, written prior |
16 |
|
|
permission. |
17 |
|
|
|
18 |
|
|
LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, |
19 |
|
|
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. |
20 |
|
|
IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY |
21 |
|
|
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
22 |
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER |
23 |
|
|
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, |
24 |
|
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF |
25 |
|
|
THIS SOFTWARE. |
26 |
|
|
|
27 |
|
|
****************************************************************/ |
28 |
|
|
|
29 |
|
|
/* Please send bug reports to David M. Gay (dmg at acm dot org, |
30 |
|
|
* with " at " changed at "@" and " dot " changed to "."). */ |
31 |
|
|
|
32 |
|
|
#include "gdtoaimp.h" |
33 |
|
|
|
34 |
|
|
double |
35 |
|
|
ulp |
36 |
|
|
#ifdef KR_headers |
37 |
|
|
(x) U *x; |
38 |
|
|
#else |
39 |
|
|
(U *x) |
40 |
|
|
#endif |
41 |
|
|
{ |
42 |
|
|
Long L; |
43 |
|
|
U a; |
44 |
|
|
|
45 |
|
|
L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1; |
46 |
|
|
#ifndef Sudden_Underflow |
47 |
|
|
if (L > 0) { |
48 |
|
|
#endif |
49 |
|
|
#ifdef IBM |
50 |
|
|
L |= Exp_msk1 >> 4; |
51 |
|
|
#endif |
52 |
|
|
word0(&a) = L; |
53 |
|
|
word1(&a) = 0; |
54 |
|
|
#ifndef Sudden_Underflow |
55 |
|
|
} |
56 |
|
|
else { |
57 |
|
|
L = -L >> Exp_shift; |
58 |
|
|
if (L < Exp_shift) { |
59 |
|
|
word0(&a) = 0x80000 >> L; |
60 |
|
|
word1(&a) = 0; |
61 |
|
|
} |
62 |
|
|
else { |
63 |
|
|
word0(&a) = 0; |
64 |
|
|
L -= Exp_shift; |
65 |
|
|
word1(&a) = L >= 31 ? 1 : 1 << (31 - L); |
66 |
|
|
} |
67 |
|
|
} |
68 |
|
|
#endif |
69 |
|
|
return dval(&a); |
70 |
|
|
} |