
/*============================================================================

This C source file is part of TestFloat, Release 3, a package of programs for
testing the correctness of floating-point arithmetic complying with the IEEE
Standard for Floating-Point, by John R. Hauser.

Copyright 2011, 2012, 2013, 2014 The Regents of the University of California
(Regents).  All Rights Reserved.  Redistribution and use in source and binary
forms, with or without modification, are permitted provided that the following
conditions are met:

Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following two paragraphs of disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following two paragraphs of disclaimer in the
documentation and/or other materials provided with the distribution.  Neither
the name of the Regents nor the names of its contributors may be used to
endorse or promote products derived from this software without specific prior
written permission.

IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS".  REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

=============================================================================*/

#include <stdbool.h>
#include <stdint.h>
#include "platform.h"
#include "random.h"
#include "softfloat.h"
#include "genCases.h"

struct sequence {
    int expNum, term1Num, term2Num;
    bool done;
};

union ui64_f64 { uint64_t ui; float64_t f; };

enum {
    f64NumQIn  =  22,
    f64NumQOut =  64,
    f64NumP1   =   4,
    f64NumP2   = 204
};
static const uint64_t f64QIn[f64NumQIn] = {
    UINT64_C( 0x0000000000000000 ),    /* positive, subnormal       */
    UINT64_C( 0x0010000000000000 ),    /* positive, -1022           */
    UINT64_C( 0x3CA0000000000000 ),    /* positive,   -53           */
    UINT64_C( 0x3FD0000000000000 ),    /* positive,    -2           */
    UINT64_C( 0x3FE0000000000000 ),    /* positive,    -1           */
    UINT64_C( 0x3FF0000000000000 ),    /* positive,     0           */
    UINT64_C( 0x4000000000000000 ),    /* positive,     1           */
    UINT64_C( 0x4010000000000000 ),    /* positive,     2           */
    UINT64_C( 0x4340000000000000 ),    /* positive,    53           */
    UINT64_C( 0x7FE0000000000000 ),    /* positive,  1023           */
    UINT64_C( 0x7FF0000000000000 ),    /* positive, infinity or NaN */
    UINT64_C( 0x8000000000000000 ),    /* negative, subnormal       */
    UINT64_C( 0x8010000000000000 ),    /* negative, -1022           */
    UINT64_C( 0xBCA0000000000000 ),    /* negative,   -53           */
    UINT64_C( 0xBFD0000000000000 ),    /* negative,    -2           */
    UINT64_C( 0xBFE0000000000000 ),    /* negative,    -1           */
    UINT64_C( 0xBFF0000000000000 ),    /* negative,     0           */
    UINT64_C( 0xC000000000000000 ),    /* negative,     1           */
    UINT64_C( 0xC010000000000000 ),    /* negative,     2           */
    UINT64_C( 0xC340000000000000 ),    /* negative,    53           */
    UINT64_C( 0xFFE0000000000000 ),    /* negative,  1023           */
    UINT64_C( 0xFFF0000000000000 )     /* negative, infinity or NaN */
};
static const uint64_t f64QOut[f64NumQOut] = {
    UINT64_C( 0x0000000000000000 ),    /* positive, subnormal       */
    UINT64_C( 0x0010000000000000 ),    /* positive, -1022           */
    UINT64_C( 0x0020000000000000 ),    /* positive, -1021           */
    UINT64_C( 0x37E0000000000000 ),    /* positive,  -129           */
    UINT64_C( 0x37F0000000000000 ),    /* positive,  -128           */
    UINT64_C( 0x3800000000000000 ),    /* positive,  -127           */
    UINT64_C( 0x3810000000000000 ),    /* positive,  -126           */
    UINT64_C( 0x3CA0000000000000 ),    /* positive,   -53           */
    UINT64_C( 0x3FB0000000000000 ),    /* positive,    -4           */
    UINT64_C( 0x3FC0000000000000 ),    /* positive,    -3           */
    UINT64_C( 0x3FD0000000000000 ),    /* positive,    -2           */
    UINT64_C( 0x3FE0000000000000 ),    /* positive,    -1           */
    UINT64_C( 0x3FF0000000000000 ),    /* positive,     0           */
    UINT64_C( 0x4000000000000000 ),    /* positive,     1           */
    UINT64_C( 0x4010000000000000 ),    /* positive,     2           */
    UINT64_C( 0x4020000000000000 ),    /* positive,     3           */
    UINT64_C( 0x4030000000000000 ),    /* positive,     4           */
    UINT64_C( 0x41C0000000000000 ),    /* positive,    29           */
    UINT64_C( 0x41D0000000000000 ),    /* positive,    30           */
    UINT64_C( 0x41E0000000000000 ),    /* positive,    31           */
    UINT64_C( 0x41F0000000000000 ),    /* positive,    32           */
    UINT64_C( 0x4340000000000000 ),    /* positive,    53           */
    UINT64_C( 0x43C0000000000000 ),    /* positive,    61           */
    UINT64_C( 0x43D0000000000000 ),    /* positive,    62           */
    UINT64_C( 0x43E0000000000000 ),    /* positive,    63           */
    UINT64_C( 0x43F0000000000000 ),    /* positive,    64           */
    UINT64_C( 0x47E0000000000000 ),    /* positive,   127           */
    UINT64_C( 0x47F0000000000000 ),    /* positive,   128           */
    UINT64_C( 0x4800000000000000 ),    /* positive,   129           */
    UINT64_C( 0x7FD0000000000000 ),    /* positive,  1022           */
    UINT64_C( 0x7FE0000000000000 ),    /* positive,  1023           */
    UINT64_C( 0x7FF0000000000000 ),    /* positive, infinity or NaN */
    UINT64_C( 0x8000000000000000 ),    /* negative, subnormal       */
    UINT64_C( 0x8010000000000000 ),    /* negative, -1022           */
    UINT64_C( 0x8020000000000000 ),    /* negative, -1021           */
    UINT64_C( 0xB7E0000000000000 ),    /* negative,  -129           */
    UINT64_C( 0xB7F0000000000000 ),    /* negative,  -128           */
    UINT64_C( 0xB800000000000000 ),    /* negative,  -127           */
    UINT64_C( 0xB810000000000000 ),    /* negative,  -126           */
    UINT64_C( 0xBCA0000000000000 ),    /* negative,   -53           */
    UINT64_C( 0xBFB0000000000000 ),    /* negative,    -4           */
    UINT64_C( 0xBFC0000000000000 ),    /* negative,    -3           */
    UINT64_C( 0xBFD0000000000000 ),    /* negative,    -2           */
    UINT64_C( 0xBFE0000000000000 ),    /* negative,    -1           */
    UINT64_C( 0xBFF0000000000000 ),    /* negative,     0           */
    UINT64_C( 0xC000000000000000 ),    /* negative,     1           */
    UINT64_C( 0xC010000000000000 ),    /* negative,     2           */
    UINT64_C( 0xC020000000000000 ),    /* negative,     3           */
    UINT64_C( 0xC030000000000000 ),    /* negative,     4           */
    UINT64_C( 0xC1C0000000000000 ),    /* negative,    29           */
    UINT64_C( 0xC1D0000000000000 ),    /* negative,    30           */
    UINT64_C( 0xC1E0000000000000 ),    /* negative,    31           */
    UINT64_C( 0xC1F0000000000000 ),    /* negative,    32           */
    UINT64_C( 0xC340000000000000 ),    /* negative,    53           */
    UINT64_C( 0xC3C0000000000000 ),    /* negative,    61           */
    UINT64_C( 0xC3D0000000000000 ),    /* negative,    62           */
    UINT64_C( 0xC3E0000000000000 ),    /* negative,    63           */
    UINT64_C( 0xC3F0000000000000 ),    /* negative,    64           */
    UINT64_C( 0xC7E0000000000000 ),    /* negative,   127           */
    UINT64_C( 0xC7F0000000000000 ),    /* negative,   128           */
    UINT64_C( 0xC800000000000000 ),    /* negative,   129           */
    UINT64_C( 0xFFD0000000000000 ),    /* negative,  1022           */
    UINT64_C( 0xFFE0000000000000 ),    /* negative,  1023           */
    UINT64_C( 0xFFF0000000000000 )     /* negative, infinity or NaN */
};
static const uint64_t f64P1[f64NumP1] = {
    UINT64_C( 0x0000000000000000 ),
    UINT64_C( 0x0000000000000001 ),
    UINT64_C( 0x000FFFFFFFFFFFFF ),
    UINT64_C( 0x000FFFFFFFFFFFFE )
};
static const uint64_t f64P2[f64NumP2] = {
    UINT64_C( 0x0000000000000000 ),
    UINT64_C( 0x0000000000000001 ),
    UINT64_C( 0x0000000000000002 ),
    UINT64_C( 0x0000000000000004 ),
    UINT64_C( 0x0000000000000008 ),
    UINT64_C( 0x0000000000000010 ),
    UINT64_C( 0x0000000000000020 ),
    UINT64_C( 0x0000000000000040 ),
    UINT64_C( 0x0000000000000080 ),
    UINT64_C( 0x0000000000000100 ),
    UINT64_C( 0x0000000000000200 ),
    UINT64_C( 0x0000000000000400 ),
    UINT64_C( 0x0000000000000800 ),
    UINT64_C( 0x0000000000001000 ),
    UINT64_C( 0x0000000000002000 ),
    UINT64_C( 0x0000000000004000 ),
    UINT64_C( 0x0000000000008000 ),
    UINT64_C( 0x0000000000010000 ),
    UINT64_C( 0x0000000000020000 ),
    UINT64_C( 0x0000000000040000 ),
    UINT64_C( 0x0000000000080000 ),
    UINT64_C( 0x0000000000100000 ),
    UINT64_C( 0x0000000000200000 ),
    UINT64_C( 0x0000000000400000 ),
    UINT64_C( 0x0000000000800000 ),
    UINT64_C( 0x0000000001000000 ),
    UINT64_C( 0x0000000002000000 ),
    UINT64_C( 0x0000000004000000 ),
    UINT64_C( 0x0000000008000000 ),
    UINT64_C( 0x0000000010000000 ),
    UINT64_C( 0x0000000020000000 ),
    UINT64_C( 0x0000000040000000 ),
    UINT64_C( 0x0000000080000000 ),
    UINT64_C( 0x0000000100000000 ),
    UINT64_C( 0x0000000200000000 ),
    UINT64_C( 0x0000000400000000 ),
    UINT64_C( 0x0000000800000000 ),
    UINT64_C( 0x0000001000000000 ),
    UINT64_C( 0x0000002000000000 ),
    UINT64_C( 0x0000004000000000 ),
    UINT64_C( 0x0000008000000000 ),
    UINT64_C( 0x0000010000000000 ),
    UINT64_C( 0x0000020000000000 ),
    UINT64_C( 0x0000040000000000 ),
    UINT64_C( 0x0000080000000000 ),
    UINT64_C( 0x0000100000000000 ),
    UINT64_C( 0x0000200000000000 ),
    UINT64_C( 0x0000400000000000 ),
    UINT64_C( 0x0000800000000000 ),
    UINT64_C( 0x0001000000000000 ),
    UINT64_C( 0x0002000000000000 ),
    UINT64_C( 0x0004000000000000 ),
    UINT64_C( 0x0008000000000000 ),
    UINT64_C( 0x000C000000000000 ),
    UINT64_C( 0x000E000000000000 ),
    UINT64_C( 0x000F000000000000 ),
    UINT64_C( 0x000F800000000000 ),
    UINT64_C( 0x000FC00000000000 ),
    UINT64_C( 0x000FE00000000000 ),
    UINT64_C( 0x000FF00000000000 ),
    UINT64_C( 0x000FF80000000000 ),
    UINT64_C( 0x000FFC0000000000 ),
    UINT64_C( 0x000FFE0000000000 ),
    UINT64_C( 0x000FFF0000000000 ),
    UINT64_C( 0x000FFF8000000000 ),
    UINT64_C( 0x000FFFC000000000 ),
    UINT64_C( 0x000FFFE000000000 ),
    UINT64_C( 0x000FFFF000000000 ),
    UINT64_C( 0x000FFFF800000000 ),
    UINT64_C( 0x000FFFFC00000000 ),
    UINT64_C( 0x000FFFFE00000000 ),
    UINT64_C( 0x000FFFFF00000000 ),
    UINT64_C( 0x000FFFFF80000000 ),
    UINT64_C( 0x000FFFFFC0000000 ),
    UINT64_C( 0x000FFFFFE0000000 ),
    UINT64_C( 0x000FFFFFF0000000 ),
    UINT64_C( 0x000FFFFFF8000000 ),
    UINT64_C( 0x000FFFFFFC000000 ),
    UINT64_C( 0x000FFFFFFE000000 ),
    UINT64_C( 0x000FFFFFFF000000 ),
    UINT64_C( 0x000FFFFFFF800000 ),
    UINT64_C( 0x000FFFFFFFC00000 ),
    UINT64_C( 0x000FFFFFFFE00000 ),
    UINT64_C( 0x000FFFFFFFF00000 ),
    UINT64_C( 0x000FFFFFFFF80000 ),
    UINT64_C( 0x000FFFFFFFFC0000 ),
    UINT64_C( 0x000FFFFFFFFE0000 ),
    UINT64_C( 0x000FFFFFFFFF0000 ),
    UINT64_C( 0x000FFFFFFFFF8000 ),
    UINT64_C( 0x000FFFFFFFFFC000 ),
    UINT64_C( 0x000FFFFFFFFFE000 ),
    UINT64_C( 0x000FFFFFFFFFF000 ),
    UINT64_C( 0x000FFFFFFFFFF800 ),
    UINT64_C( 0x000FFFFFFFFFFC00 ),
    UINT64_C( 0x000FFFFFFFFFFE00 ),
    UINT64_C( 0x000FFFFFFFFFFF00 ),
    UINT64_C( 0x000FFFFFFFFFFF80 ),
    UINT64_C( 0x000FFFFFFFFFFFC0 ),
    UINT64_C( 0x000FFFFFFFFFFFE0 ),
    UINT64_C( 0x000FFFFFFFFFFFF0 ),
    UINT64_C( 0x000FFFFFFFFFFFF8 ),
    UINT64_C( 0x000FFFFFFFFFFFFC ),
    UINT64_C( 0x000FFFFFFFFFFFFE ),
    UINT64_C( 0x000FFFFFFFFFFFFF ),
    UINT64_C( 0x000FFFFFFFFFFFFD ),
    UINT64_C( 0x000FFFFFFFFFFFFB ),
    UINT64_C( 0x000FFFFFFFFFFFF7 ),
    UINT64_C( 0x000FFFFFFFFFFFEF ),
    UINT64_C( 0x000FFFFFFFFFFFDF ),
    UINT64_C( 0x000FFFFFFFFFFFBF ),
    UINT64_C( 0x000FFFFFFFFFFF7F ),
    UINT64_C( 0x000FFFFFFFFFFEFF ),
    UINT64_C( 0x000FFFFFFFFFFDFF ),
    UINT64_C( 0x000FFFFFFFFFFBFF ),
    UINT64_C( 0x000FFFFFFFFFF7FF ),
    UINT64_C( 0x000FFFFFFFFFEFFF ),
    UINT64_C( 0x000FFFFFFFFFDFFF ),
    UINT64_C( 0x000FFFFFFFFFBFFF ),
    UINT64_C( 0x000FFFFFFFFF7FFF ),
    UINT64_C( 0x000FFFFFFFFEFFFF ),
    UINT64_C( 0x000FFFFFFFFDFFFF ),
    UINT64_C( 0x000FFFFFFFFBFFFF ),
    UINT64_C( 0x000FFFFFFFF7FFFF ),
    UINT64_C( 0x000FFFFFFFEFFFFF ),
    UINT64_C( 0x000FFFFFFFDFFFFF ),
    UINT64_C( 0x000FFFFFFFBFFFFF ),
    UINT64_C( 0x000FFFFFFF7FFFFF ),
    UINT64_C( 0x000FFFFFFEFFFFFF ),
    UINT64_C( 0x000FFFFFFDFFFFFF ),
    UINT64_C( 0x000FFFFFFBFFFFFF ),
    UINT64_C( 0x000FFFFFF7FFFFFF ),
    UINT64_C( 0x000FFFFFEFFFFFFF ),
    UINT64_C( 0x000FFFFFDFFFFFFF ),
    UINT64_C( 0x000FFFFFBFFFFFFF ),
    UINT64_C( 0x000FFFFF7FFFFFFF ),
    UINT64_C( 0x000FFFFEFFFFFFFF ),
    UINT64_C( 0x000FFFFDFFFFFFFF ),
    UINT64_C( 0x000FFFFBFFFFFFFF ),
    UINT64_C( 0x000FFFF7FFFFFFFF ),
    UINT64_C( 0x000FFFEFFFFFFFFF ),
    UINT64_C( 0x000FFFDFFFFFFFFF ),
    UINT64_C( 0x000FFFBFFFFFFFFF ),
    UINT64_C( 0x000FFF7FFFFFFFFF ),
    UINT64_C( 0x000FFEFFFFFFFFFF ),
    UINT64_C( 0x000FFDFFFFFFFFFF ),
    UINT64_C( 0x000FFBFFFFFFFFFF ),
    UINT64_C( 0x000FF7FFFFFFFFFF ),
    UINT64_C( 0x000FEFFFFFFFFFFF ),
    UINT64_C( 0x000FDFFFFFFFFFFF ),
    UINT64_C( 0x000FBFFFFFFFFFFF ),
    UINT64_C( 0x000F7FFFFFFFFFFF ),
    UINT64_C( 0x000EFFFFFFFFFFFF ),
    UINT64_C( 0x000DFFFFFFFFFFFF ),
    UINT64_C( 0x000BFFFFFFFFFFFF ),
    UINT64_C( 0x0007FFFFFFFFFFFF ),
    UINT64_C( 0x0003FFFFFFFFFFFF ),
    UINT64_C( 0x0001FFFFFFFFFFFF ),
    UINT64_C( 0x0000FFFFFFFFFFFF ),
    UINT64_C( 0x00007FFFFFFFFFFF ),
    UINT64_C( 0x00003FFFFFFFFFFF ),
    UINT64_C( 0x00001FFFFFFFFFFF ),
    UINT64_C( 0x00000FFFFFFFFFFF ),
    UINT64_C( 0x000007FFFFFFFFFF ),
    UINT64_C( 0x000003FFFFFFFFFF ),
    UINT64_C( 0x000001FFFFFFFFFF ),
    UINT64_C( 0x000000FFFFFFFFFF ),
    UINT64_C( 0x0000007FFFFFFFFF ),
    UINT64_C( 0x0000003FFFFFFFFF ),
    UINT64_C( 0x0000001FFFFFFFFF ),
    UINT64_C( 0x0000000FFFFFFFFF ),
    UINT64_C( 0x00000007FFFFFFFF ),
    UINT64_C( 0x00000003FFFFFFFF ),
    UINT64_C( 0x00000001FFFFFFFF ),
    UINT64_C( 0x00000000FFFFFFFF ),
    UINT64_C( 0x000000007FFFFFFF ),
    UINT64_C( 0x000000003FFFFFFF ),
    UINT64_C( 0x000000001FFFFFFF ),
    UINT64_C( 0x000000000FFFFFFF ),
    UINT64_C( 0x0000000007FFFFFF ),
    UINT64_C( 0x0000000003FFFFFF ),
    UINT64_C( 0x0000000001FFFFFF ),
    UINT64_C( 0x0000000000FFFFFF ),
    UINT64_C( 0x00000000007FFFFF ),
    UINT64_C( 0x00000000003FFFFF ),
    UINT64_C( 0x00000000001FFFFF ),
    UINT64_C( 0x00000000000FFFFF ),
    UINT64_C( 0x000000000007FFFF ),
    UINT64_C( 0x000000000003FFFF ),
    UINT64_C( 0x000000000001FFFF ),
    UINT64_C( 0x000000000000FFFF ),
    UINT64_C( 0x0000000000007FFF ),
    UINT64_C( 0x0000000000003FFF ),
    UINT64_C( 0x0000000000001FFF ),
    UINT64_C( 0x0000000000000FFF ),
    UINT64_C( 0x00000000000007FF ),
    UINT64_C( 0x00000000000003FF ),
    UINT64_C( 0x00000000000001FF ),
    UINT64_C( 0x00000000000000FF ),
    UINT64_C( 0x000000000000007F ),
    UINT64_C( 0x000000000000003F ),
    UINT64_C( 0x000000000000001F ),
    UINT64_C( 0x000000000000000F ),
    UINT64_C( 0x0000000000000007 ),
    UINT64_C( 0x0000000000000003 )
};

static const uint_fast64_t f64NumQInP1 = f64NumQIn * f64NumP1;
static const uint_fast64_t f64NumQOutP1 = f64NumQOut * f64NumP1;

static float64_t f64NextQInP1( struct sequence *sequencePtr )
{
    int expNum, sigNum;
    union ui64_f64 uZ;

    expNum = sequencePtr->expNum;
    sigNum = sequencePtr->term1Num;
    uZ.ui = f64QIn[expNum] | f64P1[sigNum];
    ++sigNum;
    if ( f64NumP1 <= sigNum ) {
        sigNum = 0;
        ++expNum;
        if ( f64NumQIn <= expNum ) {
            expNum = 0;
            sequencePtr->done = true;
        }
        sequencePtr->expNum = expNum;
    }
    sequencePtr->term1Num = sigNum;
    return uZ.f;

}

static float64_t f64NextQOutP1( struct sequence *sequencePtr )
{
    int expNum, sigNum;
    union ui64_f64 uZ;

    expNum = sequencePtr->expNum;
    sigNum = sequencePtr->term1Num;
    uZ.ui = f64QOut[expNum] | f64P1[sigNum];
    ++sigNum;
    if ( f64NumP1 <= sigNum ) {
        sigNum = 0;
        ++expNum;
        if ( f64NumQOut <= expNum ) {
            expNum = 0;
            sequencePtr->done = true;
        }
        sequencePtr->expNum = expNum;
    }
    sequencePtr->term1Num = sigNum;
    return uZ.f;

}

static const uint_fast64_t f64NumQInP2 = f64NumQIn * f64NumP2;
static const uint_fast64_t f64NumQOutP2 = f64NumQOut * f64NumP2;

static float64_t f64NextQInP2( struct sequence *sequencePtr )
{
    int expNum, sigNum;
    union ui64_f64 uZ;

    expNum = sequencePtr->expNum;
    sigNum = sequencePtr->term1Num;
    uZ.ui = f64QIn[expNum] | f64P2[sigNum];
    ++sigNum;
    if ( f64NumP2 <= sigNum ) {
        sigNum = 0;
        ++expNum;
        if ( f64NumQIn <= expNum ) {
            expNum = 0;
            sequencePtr->done = true;
        }
        sequencePtr->expNum = expNum;
    }
    sequencePtr->term1Num = sigNum;
    return uZ.f;

}

static float64_t f64NextQOutP2( struct sequence *sequencePtr )
{
    int expNum, sigNum;
    union ui64_f64 uZ;

    expNum = sequencePtr->expNum;
    sigNum = sequencePtr->term1Num;
    uZ.ui = f64QOut[expNum] | f64P2[sigNum];
    ++sigNum;
    if ( f64NumP2 <= sigNum ) {
        sigNum = 0;
        ++expNum;
        if ( f64NumQOut <= expNum ) {
            expNum = 0;
            sequencePtr->done = true;
        }
        sequencePtr->expNum = expNum;
    }
    sequencePtr->term1Num = sigNum;
    return uZ.f;

}

static float64_t f64RandomQOutP3( void )
{
    union ui64_f64 uZ;

    uZ.ui =
          f64QOut[randomN_ui8( f64NumQOut )]
        | ((f64P2[randomN_ui8( f64NumP2 )] + f64P2[randomN_ui8( f64NumP2 )])
               & UINT64_C( 0x000FFFFFFFFFFFFF ));
    return uZ.f;

}

static float64_t f64RandomQOutPInf( void )
{
    union ui64_f64 uZ;

    uZ.ui =
        f64QOut[randomN_ui8( f64NumQOut )]
            | (random_ui64() & UINT64_C( 0x000FFFFFFFFFFFFF ));
    return uZ.f;

}

enum { f64NumQInfWeightMasks = 10 };
static const uint64_t f64QInfWeightMasks[f64NumQInfWeightMasks] = {
    UINT64_C( 0xFFF0000000000000 ),
    UINT64_C( 0xFFF0000000000000 ),
    UINT64_C( 0xBFF0000000000000 ),
    UINT64_C( 0x9FF0000000000000 ),
    UINT64_C( 0x8FF0000000000000 ),
    UINT64_C( 0x87F0000000000000 ),
    UINT64_C( 0x83F0000000000000 ),
    UINT64_C( 0x81F0000000000000 ),
    UINT64_C( 0x80F0000000000000 ),
    UINT64_C( 0x8070000000000000 )
};
static const uint64_t f64QInfWeightOffsets[f64NumQInfWeightMasks] = {
    UINT64_C( 0x0000000000000000 ),
    UINT64_C( 0x0000000000000000 ),
    UINT64_C( 0x2000000000000000 ),
    UINT64_C( 0x3000000000000000 ),
    UINT64_C( 0x3800000000000000 ),
    UINT64_C( 0x3C00000000000000 ),
    UINT64_C( 0x3E00000000000000 ),
    UINT64_C( 0x3F00000000000000 ),
    UINT64_C( 0x3F80000000000000 ),
    UINT64_C( 0x3FC0000000000000 )
};

static float64_t f64RandomQInfP3( void )
{
    int weightMaskNum;
    union ui64_f64 uZ;

    weightMaskNum = randomN_ui8( f64NumQInfWeightMasks );
    uZ.ui =
          (((uint_fast64_t) random_ui16()<<48
                & f64QInfWeightMasks[weightMaskNum])
               + f64QInfWeightOffsets[weightMaskNum])
        | ((f64P2[randomN_ui8( f64NumP2 )] + f64P2[randomN_ui8( f64NumP2 )])
               & UINT64_C( 0x000FFFFFFFFFFFFF ));
    return uZ.f;

}

static float64_t f64RandomQInfPInf( void )
{
    int weightMaskNum;
    union ui64_f64 uZ;

    weightMaskNum = randomN_ui8( f64NumQInfWeightMasks );
    uZ.ui =
        (random_ui64()
             & (f64QInfWeightMasks[weightMaskNum]
                    | UINT64_C( 0x000FFFFFFFFFFFFF )))
            + f64QInfWeightOffsets[weightMaskNum];
    return uZ.f;

}

static float64_t f64Random( void )
{

    switch ( random_ui8() & 7 ) {
     case 0:
     case 1:
     case 2:
        return f64RandomQOutP3();
     case 3:
        return f64RandomQOutPInf();
     case 4:
     case 5:
     case 6:
        return f64RandomQInfP3();
     case 7:
        return f64RandomQInfPInf();
    }

}

static struct sequence sequenceA, sequenceB, sequenceC;
static float64_t currentA, currentB, currentC;
static int subcase;

float64_t genCases_f64_a, genCases_f64_b, genCases_f64_c;

void genCases_f64_a_init( void )
{

    sequenceA.expNum = 0;
    sequenceA.term1Num = 0;
    sequenceA.term2Num = 0;
    sequenceA.done = false;
    subcase = 0;
    genCases_total =
        (genCases_level == 1) ? 3 * f64NumQOutP1 : 2 * f64NumQOutP2;
    genCases_done = false;

}

void genCases_f64_a_next( void )
{

    if ( genCases_level == 1 ) {
        switch ( subcase ) {
         case 0:
         case 1:
            genCases_f64_a = f64Random();
            break;
         case 2:
            genCases_f64_a = f64NextQOutP1( &sequenceA );
            genCases_done = sequenceA.done;
            subcase = -1;
            break;
        }
     } else {
        switch ( subcase ) {
         case 0:
            genCases_f64_a = f64Random();
            break;
         case 1:
            genCases_f64_a = f64NextQOutP2( &sequenceA );
            genCases_done = sequenceA.done;
            subcase = -1;
            break;
        }
    }
    ++subcase;

}

void genCases_f64_ab_init( void )
{

    sequenceA.expNum = 0;
    sequenceA.term1Num = 0;
    sequenceA.term2Num = 0;
    sequenceA.done = false;
    sequenceB.expNum = 0;
    sequenceB.term1Num = 0;
    sequenceB.term2Num = 0;
    sequenceB.done = false;
    subcase = 0;
    if ( genCases_level == 1 ) {
        genCases_total = 6 * f64NumQInP1 * f64NumQInP1;
        currentA = f64NextQInP1( &sequenceA );
    } else {
        genCases_total = 2 * f64NumQInP2 * f64NumQInP2;
        currentA = f64NextQInP2( &sequenceA );
    }
    genCases_done = false;

}

void genCases_f64_ab_next( void )
{

    if ( genCases_level == 1 ) {
        switch ( subcase ) {
         case 0:
            if ( sequenceB.done ) {
                sequenceB.done = false;
                currentA = f64NextQInP1( &sequenceA );
            }
            currentB = f64NextQInP1( &sequenceB );
         case 2:
         case 4:
            genCases_f64_a = f64Random();
            genCases_f64_b = f64Random();
            break;
         case 1:
            genCases_f64_a = currentA;
            genCases_f64_b = f64Random();
            break;
         case 3:
            genCases_f64_a = f64Random();
            genCases_f64_b = currentB;
            break;
         case 5:
            genCases_f64_a = currentA;
            genCases_f64_b = currentB;
            genCases_done = sequenceA.done & sequenceB.done;
            subcase = -1;
            break;
        }
    } else {
        switch ( subcase ) {
         case 0:
            genCases_f64_a = f64Random();
            genCases_f64_b = f64Random();
            break;
         case 1:
            if ( sequenceB.done ) {
                sequenceB.done = false;
                currentA = f64NextQInP2( &sequenceA );
            }
            genCases_f64_a = currentA;
            genCases_f64_b = f64NextQInP2( &sequenceB );
            genCases_done = sequenceA.done & sequenceB.done;
            subcase = -1;
            break;
        }
    }
    ++subcase;

}

void genCases_f64_abc_init( void )
{

    sequenceA.expNum = 0;
    sequenceA.term1Num = 0;
    sequenceA.term2Num = 0;
    sequenceA.done = false;
    sequenceB.expNum = 0;
    sequenceB.term1Num = 0;
    sequenceB.term2Num = 0;
    sequenceB.done = false;
    sequenceC.expNum = 0;
    sequenceC.term1Num = 0;
    sequenceC.term2Num = 0;
    sequenceC.done = false;
    subcase = 0;
    if ( genCases_level == 1 ) {
        genCases_total = 9 * f64NumQInP1 * f64NumQInP1 * f64NumQInP1;
        currentA = f64NextQInP1( &sequenceA );
        currentB = f64NextQInP1( &sequenceB );
    } else {
        genCases_total = 2 * f64NumQInP2 * f64NumQInP2 * f64NumQInP2;
        currentA = f64NextQInP2( &sequenceA );
        currentB = f64NextQInP2( &sequenceB );
    }
    genCases_done = false;

}

void genCases_f64_abc_next( void )
{

    if ( genCases_level == 1 ) {
        switch ( subcase ) {
         case 0:
            if ( sequenceC.done ) {
                sequenceC.done = false;
                if ( sequenceB.done ) {
                    sequenceB.done = false;
                    currentA = f64NextQInP1( &sequenceA );
                }
                currentB = f64NextQInP1( &sequenceB );
            }
            currentC = f64NextQInP1( &sequenceC );
            genCases_f64_a = f64Random();
            genCases_f64_b = f64Random();
            genCases_f64_c = currentC;
            break;
         case 1:
            genCases_f64_a = currentA;
            genCases_f64_b = currentB;
            genCases_f64_c = f64Random();
            break;
         case 2:
            genCases_f64_a = f64Random();
            genCases_f64_b = f64Random();
            genCases_f64_c = f64Random();
            break;
         case 3:
            genCases_f64_a = f64Random();
            genCases_f64_b = currentB;
            genCases_f64_c = currentC;
            break;
         case 4:
            genCases_f64_a = currentA;
            genCases_f64_b = f64Random();
            genCases_f64_c = f64Random();
            break;
         case 5:
            genCases_f64_a = f64Random();
            genCases_f64_b = currentB;
            genCases_f64_c = f64Random();
            break;
         case 6:
            genCases_f64_a = currentA;
            genCases_f64_b = f64Random();
            genCases_f64_c = currentC;
            break;
         case 7:
            genCases_f64_a = f64Random();
            genCases_f64_b = f64Random();
            genCases_f64_c = f64Random();
            break;
         case 8:
            genCases_f64_a = currentA;
            genCases_f64_b = currentB;
            genCases_f64_c = currentC;
            genCases_done = sequenceA.done & sequenceB.done & sequenceC.done;;
            subcase = -1;
            break;
        }
    } else {
        switch ( subcase ) {
         case 0:
            genCases_f64_a = f64Random();
            genCases_f64_b = f64Random();
            genCases_f64_c = f64Random();
            break;
         case 1:
            if ( sequenceC.done ) {
                sequenceC.done = false;
                if ( sequenceB.done ) {
                    sequenceB.done = false;
                    currentA = f64NextQInP2( &sequenceA );
                }
                currentB = f64NextQInP2( &sequenceB );
            }
            genCases_f64_a = currentA;
            genCases_f64_b = currentB;
            genCases_f64_c = f64NextQInP2( &sequenceC );
            genCases_done = sequenceA.done & sequenceB.done & sequenceC.done;;
            subcase = -1;
            break;
        }
    }
    ++subcase;

}

