1*55121Storek /* 2*55121Storek * Copyright (c) 1992 The Regents of the University of California. 3*55121Storek * All rights reserved. 4*55121Storek * 5*55121Storek * This software was developed by the Computer Systems Engineering group 6*55121Storek * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 7*55121Storek * contributed to Berkeley. 8*55121Storek * 9*55121Storek * %sccs.include.redist.c% 10*55121Storek * 11*55121Storek * @(#)ieee.h 7.1 (Berkeley) 07/13/92 12*55121Storek * 13*55121Storek * from: $Header: ieee.h,v 1.6 92/06/19 23:04:29 torek Exp $ 14*55121Storek */ 15*55121Storek 16*55121Storek /* 17*55121Storek * ieee.h defines the machine-dependent layout of the machine's IEEE 18*55121Storek * floating point. It does *not* define (yet?) any of the rounding 19*55121Storek * mode bits, exceptions, and so forth. 20*55121Storek */ 21*55121Storek 22*55121Storek /* 23*55121Storek * Define the number of bits in each fraction and exponent. 24*55121Storek * 25*55121Storek * k k+1 26*55121Storek * Note that 1.0 x 2 == 0.1 x 2 and that denorms are represented 27*55121Storek * 28*55121Storek * (-exp_bias+1) 29*55121Storek * as fractions that look like 0.fffff x 2 . This means that 30*55121Storek * 31*55121Storek * -126 32*55121Storek * the number 0.10000 x 2 , for instance, is the same as the normalized 33*55121Storek * 34*55121Storek * -127 -128 35*55121Storek * float 1.0 x 2 . Thus, to represent 2 , we need one leading zero 36*55121Storek * 37*55121Storek * -129 38*55121Storek * in the fraction; to represent 2 , we need two, and so on. This 39*55121Storek * 40*55121Storek * (-exp_bias-fracbits+1) 41*55121Storek * implies that the smallest denormalized number is 2 42*55121Storek * 43*55121Storek * for whichever format we are talking about: for single precision, for 44*55121Storek * 45*55121Storek * -126 -149 46*55121Storek * instance, we get .00000000000000000000001 x 2 , or 1.0 x 2 , and 47*55121Storek * 48*55121Storek * -149 == -127 - 23 + 1. 49*55121Storek */ 50*55121Storek #define SNG_EXPBITS 8 51*55121Storek #define SNG_FRACBITS 23 52*55121Storek 53*55121Storek #define DBL_EXPBITS 11 54*55121Storek #define DBL_FRACBITS 52 55*55121Storek 56*55121Storek #ifdef notyet 57*55121Storek #define E80_EXPBITS 15 58*55121Storek #define E80_FRACBITS 64 59*55121Storek #endif 60*55121Storek 61*55121Storek #define EXT_EXPBITS 15 62*55121Storek #define EXT_FRACBITS 112 63*55121Storek 64*55121Storek struct ieee_single { 65*55121Storek u_int sng_sign:1; 66*55121Storek u_int sng_exp:8; 67*55121Storek u_int sng_frac:23; 68*55121Storek }; 69*55121Storek 70*55121Storek struct ieee_double { 71*55121Storek u_int dbl_sign:1; 72*55121Storek u_int dbl_exp:11; 73*55121Storek u_int dbl_frach:20; 74*55121Storek u_int dbl_fracl; 75*55121Storek }; 76*55121Storek 77*55121Storek struct ieee_ext { 78*55121Storek u_int ext_sign:1; 79*55121Storek u_int ext_exp:15; 80*55121Storek u_int ext_frach:16; 81*55121Storek u_int ext_frachm; 82*55121Storek u_int ext_fraclm; 83*55121Storek u_int ext_fracl; 84*55121Storek }; 85*55121Storek 86*55121Storek /* 87*55121Storek * Floats whose exponent is in [1..INFNAN) (of whatever type) are 88*55121Storek * `normal'. Floats whose exponent is INFNAN are either Inf or NaN. 89*55121Storek * Floats whose exponent is zero are either zero (iff all fraction 90*55121Storek * bits are zero) or subnormal values. 91*55121Storek * 92*55121Storek * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its 93*55121Storek * high fraction; if the bit is set, it is a `quiet NaN'. 94*55121Storek */ 95*55121Storek #define SNG_EXP_INFNAN 255 96*55121Storek #define DBL_EXP_INFNAN 2047 97*55121Storek #define EXT_EXP_INFNAN 32767 98*55121Storek 99*55121Storek #if 0 100*55121Storek #define SNG_QUIETNAN (1 << 22) 101*55121Storek #define DBL_QUIETNAN (1 << 19) 102*55121Storek #define EXT_QUIETNAN (1 << 15) 103*55121Storek #endif 104*55121Storek 105*55121Storek /* 106*55121Storek * Exponent biases. 107*55121Storek */ 108*55121Storek #define SNG_EXP_BIAS 127 109*55121Storek #define DBL_EXP_BIAS 1023 110*55121Storek #define EXT_EXP_BIAS 16383 111