Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 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 | |
Ozkan Sezer | c79f961 | 2009-04-14 11:11:44 +0000 | [diff] [blame] | 34 | double ulp (dbl_union *x) |
Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 35 | { |
| 36 | Long L; |
Ozkan Sezer | fb2ed10 | 2009-04-13 13:00:44 +0000 | [diff] [blame] | 37 | union _dbl_union a; |
Ozkan Sezer | f623ed7 | 2009-04-13 18:55:50 +0000 | [diff] [blame] | 38 | |
Ozkan Sezer | c79f961 | 2009-04-14 11:11:44 +0000 | [diff] [blame] | 39 | L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1; |
Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 40 | #ifndef Sudden_Underflow |
| 41 | if (L > 0) { |
| 42 | #endif |
Ozkan Sezer | c79f961 | 2009-04-14 11:11:44 +0000 | [diff] [blame] | 43 | word0(&a) = L; |
| 44 | word1(&a) = 0; |
Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 45 | #ifndef Sudden_Underflow |
Ozkan Sezer | 455ce8b | 2009-04-13 15:02:01 +0000 | [diff] [blame] | 46 | } |
Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 47 | else { |
| 48 | L = -L >> Exp_shift; |
| 49 | if (L < Exp_shift) { |
Ozkan Sezer | c79f961 | 2009-04-14 11:11:44 +0000 | [diff] [blame] | 50 | word0(&a) = 0x80000 >> L; |
| 51 | word1(&a) = 0; |
Ozkan Sezer | 455ce8b | 2009-04-13 15:02:01 +0000 | [diff] [blame] | 52 | } |
Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 53 | else { |
Ozkan Sezer | c79f961 | 2009-04-14 11:11:44 +0000 | [diff] [blame] | 54 | word0(&a) = 0; |
Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 55 | L -= Exp_shift; |
Ozkan Sezer | c79f961 | 2009-04-14 11:11:44 +0000 | [diff] [blame] | 56 | word1(&a) = L >= 31 ? 1 : 1 << (31 - L); |
Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 57 | } |
Ozkan Sezer | 455ce8b | 2009-04-13 15:02:01 +0000 | [diff] [blame] | 58 | } |
Kai Tietz | 97a6a33 | 2008-04-10 09:29:08 +0000 | [diff] [blame] | 59 | #endif |
Ozkan Sezer | c79f961 | 2009-04-14 11:11:44 +0000 | [diff] [blame] | 60 | return dval(&a); |
Ozkan Sezer | 455ce8b | 2009-04-13 15:02:01 +0000 | [diff] [blame] | 61 | } |