Annotation of 43BSDReno/lib/libm/common_source/mathimpl.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1988 The Regents of the University of California.
        !             3:  * All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms are permitted
        !             6:  * provided that: (1) source distributions retain this entire copyright
        !             7:  * notice and comment, and (2) distributions including binaries display
        !             8:  * the following acknowledgement:  ``This product includes software
        !             9:  * developed by the University of California, Berkeley and its contributors''
        !            10:  * in the documentation or other materials provided with the distribution
        !            11:  * and in all advertising materials mentioning features or use of this
        !            12:  * software. Neither the name of the University nor the names of its
        !            13:  * contributors may be used to endorse or promote products derived
        !            14:  * from this software without specific prior written permission.
        !            15:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
        !            16:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
        !            17:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        !            18:  *
        !            19:  * All recipients should regard themselves as participants in an ongoing
        !            20:  * research project and hence should feel obligated to report their
        !            21:  * experiences (good or bad) with these elementary function codes, using
        !            22:  * the sendbug(8) program, to the authors.
        !            23:  *
        !            24:  *     @(#)mathimpl.h  5.2 (Berkeley) 6/1/90
        !            25:  */
        !            26: 
        !            27: #include <math.h>
        !            28: 
        !            29: #ifdef __STDC__
        !            30: #define const const
        !            31: #else
        !            32: #define const /**/
        !            33: #endif
        !            34: 
        !            35: #if defined(vax)||defined(tahoe)
        !            36: 
        !            37: /* Deal with different ways to concatenate in cpp */
        !            38: #  ifdef __STDC__
        !            39: #    define    cat3(a,b,c) a ## b ## c
        !            40: #  else
        !            41: #    define    cat3(a,b,c) a/**/b/**/c
        !            42: #  endif
        !            43: 
        !            44: /* Deal with vax/tahoe byte order issues */
        !            45: #  ifdef vax
        !            46: #    define    cat3t(a,b,c) cat3(a,b,c)
        !            47: #  else
        !            48: #    define    cat3t(a,b,c) cat3(a,c,b)
        !            49: #  endif
        !            50: 
        !            51: #  define vccast(name) (*(const double *)(cat3(name,,x)))
        !            52: 
        !            53:    /*
        !            54:     * Define a constant to high precision on a Vax or Tahoe.
        !            55:     *
        !            56:     * Args are the name to define, the decimal floating point value,
        !            57:     * four 16-bit chunks of the float value in hex
        !            58:     * (because the vax and tahoe differ in float format!), the power
        !            59:     * of 2 of the hex-float exponent, and the hex-float mantissa.
        !            60:     * Most of these arguments are not used at compile time; they are
        !            61:     * used in a post-check to make sure the constants were compiled
        !            62:     * correctly.
        !            63:     *
        !            64:     * People who want to use the constant will have to do their own
        !            65:     *     #define foo vccast(foo)
        !            66:     * since CPP cannot do this for them from inside another macro (sigh).
        !            67:     * We define "vccast" if this needs doing.
        !            68:     */
        !            69: #  define vc(name, value, x1,x2,x3,x4, bexp, xval) \
        !            70:        const static long cat3(name,,x)[] = {cat3t(0x,x1,x2), cat3t(0x,x3,x4)};
        !            71: 
        !            72: #  define ic(name, value, bexp, xval) ;
        !            73: 
        !            74: #else  /* vax or tahoe */
        !            75: 
        !            76:    /* Hooray, we have an IEEE machine */
        !            77: #  undef vccast
        !            78: #  define vc(name, value, x1,x2,x3,x4, bexp, xval) ;
        !            79: 
        !            80: #  define ic(name, value, bexp, xval) \
        !            81:        const static double name = value;
        !            82: 
        !            83: #endif /* defined(vax)||defined(tahoe) */
        !            84: 
        !            85: 
        !            86: /*
        !            87:  * Functions internal to the math package, yet not static.
        !            88:  */
        !            89: extern double  exp__E();
        !            90: extern double  log__L();
        !            91: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.