diff options
author | John Wiegley <johnw@newartisans.com> | 2007-04-15 12:55:22 +0000 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2008-04-13 03:35:33 -0400 |
commit | b27b34a76fa16fcb96632a5bf245f3876183c479 (patch) | |
tree | fe386b51289569218b776e0d7453b161f071db70 /gdtoa/ulp.c | |
parent | b307f741c493652d64a6dde1df424c07eb698cb4 (diff) | |
download | fork-ledger-b27b34a76fa16fcb96632a5bf245f3876183c479.tar.gz fork-ledger-b27b34a76fa16fcb96632a5bf245f3876183c479.tar.bz2 fork-ledger-b27b34a76fa16fcb96632a5bf245f3876183c479.zip |
Added a reference to gdtoa, for doing expected conversion of double to amount.
Diffstat (limited to 'gdtoa/ulp.c')
-rw-r--r-- | gdtoa/ulp.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gdtoa/ulp.c b/gdtoa/ulp.c new file mode 100644 index 00000000..7810a5c8 --- /dev/null +++ b/gdtoa/ulp.c @@ -0,0 +1,70 @@ +/**************************************************************** + +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) double x; +#else + (double x) +#endif +{ + Long L; + double 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 a; + } |