#include "gdtoaimp.h"
- double
-ulp
-#ifdef KR_headers
- (x) double x;
-#else
- (double x)
-#endif
+double ulp (dbl_union *x)
{
Long L;
- double a;
+ union _dbl_union 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;
+ 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;
- }
+ word0(&a) = 0x80000 >> L;
+ word1(&a) = 0;
+ }
else {
- word0(a) = 0;
+ word0(&a) = 0;
L -= Exp_shift;
- word1(a) = L >= 31 ? 1 : 1 << (31 - L);
- }
+ word1(&a) = L >= 31 ? 1 : 1 << (31 - L);
}
-#endif
- return a;
}
+#endif
+ return dval(&a);
+}