gonzui


Format: Advanced Search

t2ex/bsd_source/lib/libc/src_bsd/stdlib/ulp.cbare sourcepermlink (0.02 seconds)

Search this content:

    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:         }