Blame HalfTest/testBitPatterns.cpp

Packit 8dc392
#include <testBitPatterns.h>
Packit 8dc392
#include "half.h"
Packit 8dc392
#include <float.h>
Packit 8dc392
#include <iostream>
Packit 8dc392
#include <string.h>
Packit 8dc392
#include <assert.h>
Packit 8dc392
Packit 8dc392
Packit 8dc392
using namespace std;
Packit 8dc392
Packit 8dc392
namespace {
Packit 8dc392
Packit 8dc392
bool
Packit 8dc392
equalBitPatterns (const char *b1, const char *b2)
Packit 8dc392
{
Packit 8dc392
    //
Packit 8dc392
    // Returns true if the characters in zero-terminated string b1
Packit 8dc392
    // are the same as the charaters in string b2, except for places
Packit 8dc392
    // where b1 or b2 contains an 'X'.  For example:
Packit 8dc392
    //
Packit 8dc392
    //	equalBitPatterns ("100", "100") returns true
Packit 8dc392
    //	equalBitPatterns ("100", "101") returns false
Packit 8dc392
    //	equalBitPatterns ("10X", "101") returns true
Packit 8dc392
    //	equalBitPatterns ("10X", "100") returns true
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    while (*b1 && *b2)
Packit 8dc392
    {
Packit 8dc392
	if (*b1 != *b2 && *b1 != 'X' && *b2 != 'X')
Packit 8dc392
	    return false;
Packit 8dc392
Packit 8dc392
	++b1;
Packit 8dc392
	++b2;
Packit 8dc392
    }
Packit 8dc392
Packit 8dc392
    return !(*b1 || *b2);
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
void
Packit 8dc392
testBits (float f, const char bh[19], const char bg[35])
Packit 8dc392
{
Packit 8dc392
    half  h (f);
Packit 8dc392
    float g (h);
Packit 8dc392
Packit 8dc392
    cout.width (15);
Packit 8dc392
    cout.precision (8);
Packit 8dc392
    cout << f << "    ";
Packit 8dc392
    printBits (cout, f);
Packit 8dc392
    cout << "    ";
Packit 8dc392
    printBits (cout, h);
Packit 8dc392
    cout << '\n';
Packit 8dc392
    cout.width (15);
Packit 8dc392
    cout << g << "    ";
Packit 8dc392
    printBits (cout, g);
Packit 8dc392
    cout << "\n\n";
Packit 8dc392
Packit 8dc392
    if (bh || bg)
Packit 8dc392
    {
Packit 8dc392
	char ch[19], cg[35];
Packit 8dc392
Packit 8dc392
	printBits (ch, h);
Packit 8dc392
	printBits (cg, g);
Packit 8dc392
Packit 8dc392
	if (!equalBitPatterns (ch, bh))
Packit 8dc392
	{
Packit 8dc392
	    cout << "error: expected " << bh << ", got " << ch << endl;
Packit 8dc392
	    assert (false);
Packit 8dc392
	}
Packit 8dc392
Packit 8dc392
	if (!equalBitPatterns (cg, bg))
Packit 8dc392
	{
Packit 8dc392
	    cout << "error: expected " << bg << ", got " << cg << endl;
Packit 8dc392
	    assert (false);
Packit 8dc392
	}
Packit 8dc392
    }
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatPosInfinity ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0x7f800000;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatNegInfinity ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0xff800000;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatPosQNan1 ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0x7fffffff;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatNegQNan1 ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0xffffffff;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatPosQNan2 ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0x7fd55555;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
Packit 8dc392
float
Packit 8dc392
floatNegQNan2 ()
Packit 8dc392
{
Packit 8dc392
    half::uif x;
Packit 8dc392
    x.i = 0xffd55555;
Packit 8dc392
    return x.f;
Packit 8dc392
}
Packit 8dc392
Packit 8dc392
} // namespace
Packit 8dc392
Packit 8dc392
Packit 8dc392
void
Packit 8dc392
testBitPatterns()
Packit 8dc392
{
Packit 8dc392
    cout << "specific bit patterns\n\n";
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Numbers close to 1.0
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (1.0f,
Packit 8dc392
	      "0 01111 0000000000",
Packit 8dc392
	      "0 01111111 00000000000000000000000");
Packit 8dc392
    testBits (1.0f + HALF_EPSILON,
Packit 8dc392
	      "0 01111 0000000001",
Packit 8dc392
	      "0 01111111 00000000010000000000000");
Packit 8dc392
    testBits (1.0f + HALF_EPSILON * 0.5f,
Packit 8dc392
	      "0 01111 0000000000",
Packit 8dc392
	      "0 01111111 00000000000000000000000");
Packit 8dc392
    testBits (1.0f+ HALF_EPSILON * 0.4999f,
Packit 8dc392
	      "0 01111 0000000000",
Packit 8dc392
	      "0 01111111 00000000000000000000000");
Packit 8dc392
    testBits (1.0f + HALF_EPSILON * 0.5001f,
Packit 8dc392
	      "0 01111 0000000001",
Packit 8dc392
	      "0 01111111 00000000010000000000000");
Packit 8dc392
    testBits (1.0f + HALF_EPSILON + HALF_EPSILON,
Packit 8dc392
	      "0 01111 0000000010",
Packit 8dc392
	      "0 01111111 00000000100000000000000");
Packit 8dc392
    testBits (1.0f + HALF_EPSILON + HALF_EPSILON * 0.5f,
Packit 8dc392
	      "0 01111 0000000010",
Packit 8dc392
	      "0 01111111 00000000100000000000000");
Packit 8dc392
    testBits (1.0f + HALF_EPSILON + HALF_EPSILON * 0.4999f,
Packit 8dc392
	      "0 01111 0000000001",
Packit 8dc392
	      "0 01111111 00000000010000000000000");
Packit 8dc392
    testBits (1.0f + HALF_EPSILON + HALF_EPSILON * 0.5001f,
Packit 8dc392
	      "0 01111 0000000010",
Packit 8dc392
	      "0 01111111 00000000100000000000000");
Packit 8dc392
    testBits (1.0f - HALF_EPSILON * 0.5f,
Packit 8dc392
	      "0 01110 1111111111",
Packit 8dc392
	      "0 01111110 11111111110000000000000");
Packit 8dc392
    testBits (1.0f - HALF_EPSILON * 0.5f * 0.5f,
Packit 8dc392
	      "0 01111 0000000000",
Packit 8dc392
	      "0 01111111 00000000000000000000000");
Packit 8dc392
    testBits (1.0f - HALF_EPSILON * 0.5f * 0.4999f,
Packit 8dc392
	      "0 01111 0000000000",
Packit 8dc392
	      "0 01111111 00000000000000000000000");
Packit 8dc392
    testBits (1.0f - HALF_EPSILON * 0.5f * 0.5001f,
Packit 8dc392
	      "0 01110 1111111111",
Packit 8dc392
	      "0 01111110 11111111110000000000000");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Numbers close to HALF_MIN
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (HALF_MIN,
Packit 8dc392
	      "0 00000 0000000001",
Packit 8dc392
	      "0 01100111 00000000000000000000000");
Packit 8dc392
    testBits (HALF_MIN + HALF_MIN,
Packit 8dc392
	      "0 00000 0000000010",
Packit 8dc392
	      "0 01101000 00000000000000000000000");
Packit 8dc392
    testBits (HALF_MIN + HALF_MIN * 0.5f,
Packit 8dc392
	      "0 00000 0000000010",
Packit 8dc392
	      "0 01101000 00000000000000000000000");
Packit 8dc392
    testBits (HALF_MIN + HALF_MIN * 0.4999f,
Packit 8dc392
	      "0 00000 0000000001",
Packit 8dc392
	      "0 01100111 00000000000000000000000");
Packit 8dc392
    testBits (HALF_MIN + HALF_MIN * 0.5001f,
Packit 8dc392
	      "0 00000 0000000010",
Packit 8dc392
	      "0 01101000 00000000000000000000000");
Packit 8dc392
    testBits (HALF_MIN - HALF_MIN,
Packit 8dc392
	      "0 00000 0000000000",
Packit 8dc392
	      "0 00000000 00000000000000000000000");
Packit 8dc392
    testBits (HALF_MIN - HALF_MIN * 0.5f,
Packit 8dc392
	      "0 00000 0000000000",
Packit 8dc392
	      "0 00000000 00000000000000000000000");
Packit 8dc392
    testBits (HALF_MIN - HALF_MIN * 0.4999f,
Packit 8dc392
	      "0 00000 0000000001",
Packit 8dc392
	      "0 01100111 00000000000000000000000");
Packit 8dc392
    testBits (HALF_MIN - HALF_MIN * 0.5001f,
Packit 8dc392
	      "0 00000 0000000000",
Packit 8dc392
	      "0 00000000 00000000000000000000000");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Numbers close to HALF_NRM_MIN
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (HALF_NRM_MIN,
Packit 8dc392
	      "0 00001 0000000000",
Packit 8dc392
	      "0 01110001 00000000000000000000000");
Packit 8dc392
    testBits (HALF_NRM_MIN + HALF_MIN,
Packit 8dc392
	      "0 00001 0000000001",
Packit 8dc392
	      "0 01110001 00000000010000000000000");
Packit 8dc392
    testBits (HALF_NRM_MIN + HALF_MIN * 0.5f,
Packit 8dc392
	      "0 00001 0000000000",
Packit 8dc392
	      "0 01110001 00000000000000000000000");
Packit 8dc392
    testBits (HALF_NRM_MIN + HALF_MIN * 0.4999f,
Packit 8dc392
	      "0 00001 0000000000",
Packit 8dc392
	      "0 01110001 00000000000000000000000");
Packit 8dc392
    testBits (HALF_NRM_MIN + HALF_MIN * 0.5001f,
Packit 8dc392
	      "0 00001 0000000001",
Packit 8dc392
	      "0 01110001 00000000010000000000000");
Packit 8dc392
    testBits (HALF_NRM_MIN - HALF_MIN,
Packit 8dc392
	      "0 00000 1111111111",
Packit 8dc392
	      "0 01110000 11111111100000000000000");
Packit 8dc392
    testBits (HALF_NRM_MIN - HALF_MIN * 0.5f,
Packit 8dc392
	      "0 00001 0000000000",
Packit 8dc392
	      "0 01110001 00000000000000000000000");
Packit 8dc392
    testBits (HALF_NRM_MIN - HALF_MIN * 0.49995f,
Packit 8dc392
	      "0 00001 0000000000",
Packit 8dc392
	      "0 01110001 00000000000000000000000");
Packit 8dc392
    testBits (HALF_NRM_MIN - HALF_MIN * 0.50005f,
Packit 8dc392
	      "0 00000 1111111111",
Packit 8dc392
	      "0 01110000 11111111100000000000000");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Small positive integers and simple decimal fractions
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (2,
Packit 8dc392
	      "0 10000 0000000000",
Packit 8dc392
	      "0 10000000 00000000000000000000000");
Packit 8dc392
    testBits (3,
Packit 8dc392
	      "0 10000 1000000000",
Packit 8dc392
	      "0 10000000 10000000000000000000000");
Packit 8dc392
    testBits (10,
Packit 8dc392
	      "0 10010 0100000000",
Packit 8dc392
	      "0 10000010 01000000000000000000000");
Packit 8dc392
    testBits (0.1f,
Packit 8dc392
	      "0 01011 1001100110",
Packit 8dc392
	      "0 01111011 10011001100000000000000");
Packit 8dc392
    testBits (0.2f,
Packit 8dc392
	      "0 01100 1001100110",
Packit 8dc392
	      "0 01111100 10011001100000000000000");
Packit 8dc392
    testBits (0.3f,
Packit 8dc392
	      "0 01101 0011001101",
Packit 8dc392
	      "0 01111101 00110011010000000000000");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Numbers close to HALF_MAX
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (HALF_MAX,
Packit 8dc392
	      "0 11110 1111111111",
Packit 8dc392
	      "0 10001110 11111111110000000000000");
Packit 8dc392
    testBits ((1 << HALF_MAX_EXP) * 1.0,
Packit 8dc392
	      "0 11111 0000000000",			// +infinity
Packit 8dc392
	      "0 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits ((1 << HALF_MAX_EXP) * (1.0f - HALF_EPSILON * 0.25f),
Packit 8dc392
	      "0 11111 0000000000",			// +infinity
Packit 8dc392
	      "0 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits ((1 << HALF_MAX_EXP) * (1.0f - HALF_EPSILON * 0.25005f),
Packit 8dc392
	      "0 11110 1111111111",
Packit 8dc392
	      "0 10001110 11111111110000000000000");
Packit 8dc392
    testBits ((1 << HALF_MAX_EXP) * (1.0f - HALF_EPSILON * 0.24995f),
Packit 8dc392
	      "0 11111 0000000000",			// +infinity
Packit 8dc392
	      "0 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Large positive numbers, positive infinity and NANs
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (HALF_MAX * HALF_MAX,
Packit 8dc392
	      "0 11111 0000000000",			// +infinity
Packit 8dc392
	      "0 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits (FLT_MAX,
Packit 8dc392
	      "0 11111 0000000000",			// +infinity
Packit 8dc392
	      "0 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits (floatPosInfinity(),
Packit 8dc392
	      "0 11111 0000000000",			// +infinity
Packit 8dc392
	      "0 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits (floatPosQNan1(),
Packit 8dc392
	      "0 11111 1111111111",			// nan
Packit 8dc392
	      "0 11111111 11111111110000000000000");	// nan
Packit 8dc392
    testBits (floatPosQNan2(),
Packit 8dc392
	      "0 11111 1010101010",			// nan
Packit 8dc392
	      "0 11111111 10101010100000000000000");	// nan
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Numbers close to -1.0
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (-1.0,
Packit 8dc392
	      "1 01111 0000000000",
Packit 8dc392
	      "1 01111111 00000000000000000000000");
Packit 8dc392
    testBits (-(1.0f + HALF_EPSILON),
Packit 8dc392
	      "1 01111 0000000001",
Packit 8dc392
	      "1 01111111 00000000010000000000000");
Packit 8dc392
    testBits (-(1.0f + HALF_EPSILON * 0.5f),
Packit 8dc392
	      "1 01111 0000000000",
Packit 8dc392
	      "1 01111111 00000000000000000000000");
Packit 8dc392
    testBits (-(1.0f + HALF_EPSILON * 0.4999f),
Packit 8dc392
	      "1 01111 0000000000",
Packit 8dc392
	      "1 01111111 00000000000000000000000");
Packit 8dc392
    testBits (-(1.0f + HALF_EPSILON * 0.5001f),
Packit 8dc392
	      "1 01111 0000000001",
Packit 8dc392
	      "1 01111111 00000000010000000000000");
Packit 8dc392
    testBits (-(1.0f + HALF_EPSILON + HALF_EPSILON),
Packit 8dc392
	      "1 01111 0000000010",
Packit 8dc392
	      "1 01111111 00000000100000000000000");
Packit 8dc392
    testBits (-(1.0f + HALF_EPSILON + HALF_EPSILON * 0.5f),
Packit 8dc392
	      "1 01111 0000000010",
Packit 8dc392
	      "1 01111111 00000000100000000000000");
Packit 8dc392
    testBits (-(1.0f + HALF_EPSILON + HALF_EPSILON * 0.4999f),
Packit 8dc392
	      "1 01111 0000000001",
Packit 8dc392
	      "1 01111111 00000000010000000000000");
Packit 8dc392
    testBits (-(1.0f + HALF_EPSILON + HALF_EPSILON * 0.5001f),
Packit 8dc392
	      "1 01111 0000000010",
Packit 8dc392
	      "1 01111111 00000000100000000000000");
Packit 8dc392
    testBits (-(1.0f - HALF_EPSILON * 0.5f),
Packit 8dc392
	      "1 01110 1111111111",
Packit 8dc392
	      "1 01111110 11111111110000000000000");
Packit 8dc392
    testBits (-(1.0f - HALF_EPSILON * 0.5f * 0.5f),
Packit 8dc392
	      "1 01111 0000000000",
Packit 8dc392
	      "1 01111111 00000000000000000000000");
Packit 8dc392
    testBits (-(1.0f - HALF_EPSILON * 0.5f * 0.4999f),
Packit 8dc392
	      "1 01111 0000000000",
Packit 8dc392
	      "1 01111111 00000000000000000000000");
Packit 8dc392
    testBits (-(1.0f - HALF_EPSILON * 0.5f * 0.5001f),
Packit 8dc392
	      "1 01110 1111111111",
Packit 8dc392
	      "1 01111110 11111111110000000000000");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Numbers close to -HALF_MIN
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (-HALF_MIN,
Packit 8dc392
	      "1 00000 0000000001",
Packit 8dc392
	      "1 01100111 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_MIN + HALF_MIN),
Packit 8dc392
	      "1 00000 0000000010",
Packit 8dc392
	      "1 01101000 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_MIN + HALF_MIN * 0.5f),
Packit 8dc392
	      "1 00000 0000000010",
Packit 8dc392
	      "1 01101000 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_MIN + HALF_MIN * 0.4999f),
Packit 8dc392
	      "1 00000 0000000001",
Packit 8dc392
	      "1 01100111 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_MIN + HALF_MIN * 0.5001f),
Packit 8dc392
	      "1 00000 0000000010",
Packit 8dc392
	      "1 01101000 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_MIN - HALF_MIN),
Packit 8dc392
	      "X 00000 0000000000",
Packit 8dc392
	      "X 00000000 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_MIN - HALF_MIN * 0.5f),
Packit 8dc392
	      "1 00000 0000000000",
Packit 8dc392
	      "1 00000000 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_MIN - HALF_MIN * 0.4999f),
Packit 8dc392
	      "1 00000 0000000001",
Packit 8dc392
	      "1 01100111 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_MIN - HALF_MIN * 0.5001f),
Packit 8dc392
	      "1 00000 0000000000",
Packit 8dc392
	      "1 00000000 00000000000000000000000");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Numbers close to -HALF_NRM_MIN
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (-HALF_NRM_MIN,
Packit 8dc392
	      "1 00001 0000000000",
Packit 8dc392
	      "1 01110001 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_NRM_MIN + HALF_MIN),
Packit 8dc392
	      "1 00001 0000000001",
Packit 8dc392
	      "1 01110001 00000000010000000000000");
Packit 8dc392
    testBits (-(HALF_NRM_MIN + HALF_MIN * 0.5f),
Packit 8dc392
	      "1 00001 0000000000",
Packit 8dc392
	      "1 01110001 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_NRM_MIN + HALF_MIN * 0.4999f),
Packit 8dc392
	      "1 00001 0000000000",
Packit 8dc392
	      "1 01110001 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_NRM_MIN + HALF_MIN * 0.5001f),
Packit 8dc392
	      "1 00001 0000000001",
Packit 8dc392
	      "1 01110001 00000000010000000000000");
Packit 8dc392
    testBits (-(HALF_NRM_MIN - HALF_MIN),
Packit 8dc392
	      "1 00000 1111111111",
Packit 8dc392
	      "1 01110000 11111111100000000000000");
Packit 8dc392
    testBits (-(HALF_NRM_MIN - HALF_MIN * 0.5f),
Packit 8dc392
	      "1 00001 0000000000",
Packit 8dc392
	      "1 01110001 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_NRM_MIN - HALF_MIN * 0.49995f),
Packit 8dc392
	      "1 00001 0000000000",
Packit 8dc392
	      "1 01110001 00000000000000000000000");
Packit 8dc392
    testBits (-(HALF_NRM_MIN - HALF_MIN * 0.50005f),
Packit 8dc392
	      "1 00000 1111111111",
Packit 8dc392
	      "1 01110000 11111111100000000000000");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Small negative integers and simple decimal fractions
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (-2,
Packit 8dc392
	      "1 10000 0000000000",
Packit 8dc392
	      "1 10000000 00000000000000000000000");
Packit 8dc392
    testBits (-3,
Packit 8dc392
	      "1 10000 1000000000",
Packit 8dc392
	      "1 10000000 10000000000000000000000");
Packit 8dc392
    testBits (-10,
Packit 8dc392
	      "1 10010 0100000000",
Packit 8dc392
	      "1 10000010 01000000000000000000000");
Packit 8dc392
    testBits (-0.1f,
Packit 8dc392
	      "1 01011 1001100110",
Packit 8dc392
	      "1 01111011 10011001100000000000000");
Packit 8dc392
    testBits (-0.2f,
Packit 8dc392
	      "1 01100 1001100110",
Packit 8dc392
	      "1 01111100 10011001100000000000000");
Packit 8dc392
    testBits (-0.3f,
Packit 8dc392
	      "1 01101 0011001101",
Packit 8dc392
	      "1 01111101 00110011010000000000000");
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Numbers close to -HALF_MAX
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (-HALF_MAX,
Packit 8dc392
	      "1 11110 1111111111",
Packit 8dc392
	      "1 10001110 11111111110000000000000");
Packit 8dc392
    testBits (-(1 << HALF_MAX_EXP) * 1.0f,
Packit 8dc392
	      "1 11111 0000000000",			// +infinity
Packit 8dc392
	      "1 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits (-(1 << HALF_MAX_EXP) * (1.0f - HALF_EPSILON * 0.25f),
Packit 8dc392
	      "1 11111 0000000000",			// +infinity
Packit 8dc392
	      "1 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits (-(1 << HALF_MAX_EXP) * (1.0f - HALF_EPSILON * 0.25005f),
Packit 8dc392
	      "1 11110 1111111111",
Packit 8dc392
	      "1 10001110 11111111110000000000000");
Packit 8dc392
    testBits (-(1 << HALF_MAX_EXP) * (1.0f - HALF_EPSILON * 0.24995f),
Packit 8dc392
	      "1 11111 0000000000",			// +infinity
Packit 8dc392
	      "1 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
Packit 8dc392
    //
Packit 8dc392
    // Large negative numbers, negative infinity and NANs
Packit 8dc392
    //
Packit 8dc392
Packit 8dc392
    testBits (-HALF_MAX * HALF_MAX,
Packit 8dc392
	      "1 11111 0000000000",			// +infinity
Packit 8dc392
	      "1 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits (-FLT_MAX,
Packit 8dc392
	      "1 11111 0000000000",			// +infinity
Packit 8dc392
	      "1 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits (floatNegInfinity(),
Packit 8dc392
	      "1 11111 0000000000",			// +infinity
Packit 8dc392
	      "1 11111111 00000000000000000000000");	// +infinity
Packit 8dc392
    testBits (floatNegQNan1(),
Packit 8dc392
	      "1 11111 1111111111",			// nan
Packit 8dc392
	      "1 11111111 11111111110000000000000");	// nan
Packit 8dc392
    testBits (floatNegQNan2(),
Packit 8dc392
	      "1 11111 1010101010",			// nan
Packit 8dc392
	      "1 11111111 10101010100000000000000");	// nan
Packit 8dc392
Packit 8dc392
    cout << "ok\n\n" << flush;
Packit 8dc392
}