home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / LINUX / MATH_EMU.ZIP / MATH_EMU / IEEE.H < prev    next >
Encoding:
C/C++ Source or Header  |  1979-12-31  |  5.0 KB  |  137 lines

  1. /*        $NetBSD: ieee.h,v 1.2 1994/11/20 20:53:10 deraadt Exp $ */
  2.  
  3. /*
  4.  * Copyright (c) 1992, 1993
  5.  *        The Regents of the University of California.  All rights reserved.
  6.  *
  7.  * This software was developed by the Computer Systems Engineering group
  8.  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
  9.  * contributed to Berkeley.
  10.  *
  11.  * All advertising materials mentioning features or use of this software
  12.  * must display the following acknowledgement:
  13.  *        This product includes software developed by the University of
  14.  *        California, Lawrence Berkeley Laboratory.
  15.  *
  16.  * Redistribution and use in source and binary forms, with or without
  17.  * modification, are permitted provided that the following conditions
  18.  * are met:
  19.  * 1. Redistributions of source code must retain the above copyright
  20.  *    notice, this list of conditions and the following disclaimer.
  21.  * 2. Redistributions in binary form must reproduce the above copyright
  22.  *    notice, this list of conditions and the following disclaimer in the
  23.  *    documentation and/or other materials provided with the distribution.
  24.  * 3. All advertising materials mentioning features or use of this software
  25.  *    must display the following acknowledgement:
  26.  *        This product includes software developed by the University of
  27.  *        California, Berkeley and its contributors.
  28.  * 4. Neither the name of the University nor the names of its contributors
  29.  *    may be used to endorse or promote products derived from this software
  30.  *    without specific prior written permission.
  31.  *
  32.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  33.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  34.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  35.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  36.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  37.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  38.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  39.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  40.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  41.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  42.  * SUCH DAMAGE.
  43.  *
  44.  *        @(#)ieee.h          8.1 (Berkeley) 6/11/93
  45.  */
  46.  
  47. /*
  48.  * ieee.h defines the machine-dependent layout of the machine's IEEE
  49.  * floating point.  It does *not* define (yet?) any of the rounding
  50.  * mode bits, exceptions, and so forth.
  51.  */
  52.  
  53. /*
  54.  * Define the number of bits in each fraction and exponent.
  55.  *
  56.  *                       k             k+1
  57.  * Note that  1.0 x 2  == 0.1 x 2      and that denorms are represented
  58.  *
  59.  *                                                  (-exp_bias+1)
  60.  * as fractions that look like 0.fffff x 2             .  This means that
  61.  *
  62.  *                             -126
  63.  * the number 0.10000 x 2    , for instance, is the same as the normalized
  64.  *
  65.  *                  -127                             -128
  66.  * float 1.0 x 2    .  Thus, to represent 2    , we need one leading zero
  67.  *
  68.  *                                        -129
  69.  * in the fraction; to represent 2    , we need two, and so on.  This
  70.  *
  71.  *                                                               (-exp_bias-fracbits+1)
  72.  * implies that the smallest denormalized number is 2
  73.  *
  74.  * for whichever format we are talking about: for single precision, for
  75.  *
  76.  *                                                          -126                -149
  77.  * instance, we get .00000000000000000000001 x 2    , or 1.0 x 2    , and
  78.  *
  79.  * -149 == -127 - 23 + 1.
  80.  */
  81. #define   SNG_EXPBITS         8
  82. #define   SNG_FRACBITS        23
  83.  
  84. #define   DBL_EXPBITS         11
  85. #define   DBL_FRACBITS        52
  86.  
  87. #define   EXT_EXPBITS         15
  88. #define   EXT_FRACBITS        64
  89.  
  90. struct ieee_single {
  91.           u_int     sng_sign:1;
  92.           u_int     sng_exp:8;
  93.           u_int     sng_frac:23;
  94. };
  95.  
  96. struct ieee_double {
  97.           u_int     dbl_sign:1;
  98.           u_int     dbl_exp:11;
  99.           u_int     dbl_frach:20;
  100.           u_int     dbl_fracl;
  101. };
  102.  
  103. struct ieee_ext {
  104.           u_int     ext_sign:1;
  105.           u_int     ext_exp:15;
  106.           u_int     ext_zero:16;
  107.           u_int     ext_int:1;
  108.           u_int     ext_frach:31;
  109.           u_int     ext_fracl;
  110. };
  111.  
  112. /*
  113.  * Floats whose exponent is in [1..INFNAN) (of whatever type) are
  114.  * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
  115.  * Floats whose exponent is zero are either zero (iff all fraction
  116.  * bits are zero) or subnormal values.
  117.  *
  118.  * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
  119.  * high fraction; if the bit is set, it is a `quiet NaN'.
  120.  */
  121. #define   SNG_EXP_INFNAN      255
  122. #define   DBL_EXP_INFNAN      2047
  123. #define   EXT_EXP_INFNAN      32767
  124.  
  125. #if 0
  126. #define   SNG_QUIETNAN        (1 << 22)
  127. #define   DBL_QUIETNAN        (1 << 19)
  128. #define   EXT_QUIETNAN        (1 << 15)
  129. #endif
  130.  
  131. /*
  132.  * Exponent biases.
  133.  */
  134. #define   SNG_EXP_BIAS        127
  135. #define   DBL_EXP_BIAS        1023
  136. #define   EXT_EXP_BIAS        16383
  137.