{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<!-- # Copyright (c) 2024 Graphcore Ltd. All rights reserved. -->\n",
    "\n",
    "# Making value tables\n",
    "\n",
    "In this notebook, we generate value tables akin to those at [P3109](https://htmlpreview.github.io/?https://raw.githubusercontent.com/P3109/Public/main/Value%20Tables/html/index.html).\n",
    "\n",
    "Thes tables comprise one-line summaries of each float value in the form\n",
    "```text\n",
    "Code Binary     = Exact binary E =  Float16 equivalent Float16 binary E    = Float Value\n",
    "0x21 0_0100_001 = +0b1.001*2^-4  = 0_01011_0010000000 +0b1.0010000000*2^-4 = ~0.0703\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from gfloat import *\n",
    "from gfloat.formats import *\n",
    "import numpy as np\n",
    "from IPython.display import HTML\n",
    "import airium"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define some helpers.\n",
    "\n",
    "### Render with underscores separating s_e_m\n",
    "\n",
    "E.g `0_1011_110`.  For formats with zero significand bits or zero exponent bits, we use `0_1011110_` or `0__10111110`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def str_bits_with_underscores(fi, fv):\n",
    "    # 0_1011110_\n",
    "    if fi.tSignificandBits == 0:\n",
    "        return f\"{fv.signbit}_{fv.exp:0{fi.expBits}b}_\"\n",
    "\n",
    "    # 0__1011110\n",
    "    if fi.expBits == 0:\n",
    "        return f\"{fv.signbit}__{fv.significand:0{fi.tSignificandBits}b}\"\n",
    "\n",
    "    # 0_101_1110\n",
    "    return (\n",
    "        f\"{fv.signbit}_{fv.exp:0{fi.expBits}b}_{fv.significand:0{fi.tSignificandBits}b}\"\n",
    "    )\n",
    "\n",
    "\n",
    "fi = format_info_p3109(3)\n",
    "assert str_bits_with_underscores(fi, decode_float(fi, 0x41)) == \"0_10000_01\"\n",
    "\n",
    "fi = format_info_p3109(1)\n",
    "assert str_bits_with_underscores(fi, decode_float(fi, 0x41)) == \"0_1000001_\"\n",
    "\n",
    "fi = format_info_p3109(7)\n",
    "assert str_bits_with_underscores(fi, decode_float(fi, 0x41)) == \"0_1_000001\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Render a binary16 value\n",
    "\n",
    "Returns two strings, like this:\n",
    "```\n",
    "'0_00010_1010000000', '+0b1.1010000000*2^-13'\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import struct\n",
    "\n",
    "\n",
    "def b16_str(val) -> tuple[str, str]:\n",
    "    \"\"\"\n",
    "    Represent VAL in binary16.\n",
    "\n",
    "    If val does not convert exactly to binary16,\n",
    "    returns \"<Not16:{val}>\"\n",
    "    \"\"\"\n",
    "    with np.errstate(over=\"ignore\"):\n",
    "        b16 = np.float16(val)\n",
    "\n",
    "    if float(b16) != val and np.isfinite(b16):\n",
    "        # Finite, but not representable in float16\n",
    "        return f\"<Not16:{val}>\", \"\"\n",
    "    b16_int = struct.unpack(\"!H\", struct.pack(\"!e\", b16))[0]\n",
    "\n",
    "    # bitstr is of the form 0_00000_1100000000\n",
    "    s = f\"{b16_int:016b}\"\n",
    "    e_str = s[1:6]\n",
    "    m_str = s[6:]\n",
    "    bitstr = f\"{s[0]}_{e_str}_{m_str}\"\n",
    "\n",
    "    # pow2str is of the form '+0b0.1100000000*2^-15', or '' for nonfinite values\n",
    "    e = int(e_str, 2) - 15\n",
    "    m = int(m_str, 2)\n",
    "    leading_bit = 0 if e == -15 else 1\n",
    "    signstr = \"-\" if s[0] == \"1\" else \"+\"\n",
    "    if np.isfinite(b16):\n",
    "        pow2str = f\"{signstr}0b{leading_bit}.{m:010b}*2^{e}\"\n",
    "    else:\n",
    "        pow2str = \"\"\n",
    "    return bitstr, pow2str\n",
    "\n",
    "\n",
    "assert b16_str(13 * 2**-16) == (\"0_00010_1010000000\", \"+0b1.1010000000*2^-13\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Print one table row"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "p3109_p3\n",
      "0x00 0_00000_00 = 0.0\n",
      "0x01 0_00000_01 = +0b0.01*2^-15 = 0_00000_0010000000 +0b0.0010000000*2^-15 = ~7.629e-06\n",
      "0x07 0_00001_11 = +0b1.11*2^-15 = 0_00000_1110000000 +0b0.1110000000*2^-15 = ~5.341e-05\n",
      "0x21 0_01000_01 = +0b1.01*2^-8  = 0_00111_0100000000 +0b1.0100000000*2^-8 = ~0.0049\n",
      "0x40 0_10000_00 = +0b1.00*2^0   = 0_01111_0000000000 +0b1.0000000000*2^0 = 1.0\n",
      "0x41 0_10000_01 = +0b1.01*2^0   = 0_01111_0100000000 +0b1.0100000000*2^0 = 1.25\n",
      "0x7e 0_11111_10 = +0b1.10*2^15  = 0_11110_1000000000 +0b1.1000000000*2^15 = 49152.0\n",
      "0x7f 0_11111_11 = inf\n",
      "0x80 1_00000_00 = nan\n",
      "0x81 1_00000_01 = -0b0.01*2^-15 = 1_00000_0010000000 -0b0.0010000000*2^-15 = ~-7.629e-06\n",
      "0xe6 1_11001_10 = -0b1.10*2^9   = 1_11000_1000000000 -0b1.1000000000*2^9 = -768.0\n",
      "0xfe 1_11111_10 = -0b1.10*2^15  = 1_11110_1000000000 -0b1.1000000000*2^15 = -49152.0\n",
      "0xff 1_11111_11 = -inf\n",
      "p3109_p1\n",
      "0x00 0_0000000_ = 0.0\n",
      "0x01 0_0000001_ = +0b1.0*2^-62 = <Not16:2.168404344971009e-19>  = ~2.168e-19\n",
      "0x07 0_0000111_ = +0b1.0*2^-56 = <Not16:1.3877787807814457e-17>  = ~1.388e-17\n",
      "0x21 0_0100001_ = +0b1.0*2^-30 = <Not16:9.313225746154785e-10>  = ~9.313e-10\n",
      "0x40 0_1000000_ = +0b1.0*2^1   = 0_10000_0000000000 +0b1.0000000000*2^1 = 2.0\n",
      "0x41 0_1000001_ = +0b1.0*2^2   = 0_10001_0000000000 +0b1.0000000000*2^2 = 4.0\n",
      "0x7e 0_1111110_ = +0b1.0*2^63  = 0_11111_0000000000  = ~9.223e+18\n",
      "0x7f 0_1111111_ = inf\n",
      "0x80 1_0000000_ = nan\n",
      "0x81 1_0000001_ = -0b1.0*2^-62 = <Not16:-2.168404344971009e-19>  = ~-2.168e-19\n",
      "0xe6 1_1100110_ = -0b1.0*2^39  = 1_11111_0000000000  = ~-5.498e+11\n",
      "0xfe 1_1111110_ = -0b1.0*2^63  = 1_11111_0000000000  = ~-9.223e+18\n",
      "0xff 1_1111111_ = -inf\n"
     ]
    }
   ],
   "source": [
    "def str_tablerow(fi, fv: FloatValue, show_b16_info=True, vs_width=14, vs_d=8):\n",
    "    \"\"\"\n",
    "    Create a string of the form\n",
    "      0x41 0_10000_01 = +0b1.01*2^0   = 1.25\n",
    "    optionally adding binary16 info\n",
    "      0x41 0_10000_01 = +0b1.01*2^0   = 0_01111_0100000000 +0b1.0100000000*2^0 = 1.25\n",
    "    \"\"\"\n",
    "    text = []\n",
    "\n",
    "    # 0x45 0_1000_101\n",
    "    text.append(f\"0x{fv.code:02x} {str_bits_with_underscores(fi, fv)}\")\n",
    "\n",
    "    finite_nonzero = np.isfinite(fv.fval) and fv.fval != 0\n",
    "\n",
    "    #  = +0b1.101*2^-7 =\n",
    "    if finite_nonzero:\n",
    "\n",
    "        def signstr(fv):\n",
    "            return \"-\" if fv.signbit else \"+\"\n",
    "\n",
    "        b = \"0\" if fv.fclass == FloatClass.SUBNORMAL else \"1\"\n",
    "        binary_pow2 = f\"{signstr(fv)}0b{b}.{fv.significand:0{fi.tSignificandBits}b}*2^{fv.expval:<3}\"\n",
    "        text.append(binary_pow2)\n",
    "\n",
    "    if show_b16_info and finite_nonzero:\n",
    "        b16_binary_str, b16_bscistr = b16_str(fv.fval)\n",
    "        text.append(f\"{b16_binary_str} {b16_bscistr}\")\n",
    "\n",
    "    # 1.125\n",
    "    text.append(float_tilde_unless_roundtrip_str(fv.fval, width=vs_width, d=vs_d))\n",
    "\n",
    "    # Return tuple\n",
    "    return \" = \".join(text)\n",
    "\n",
    "\n",
    "for fi in (format_info_p3109(3), format_info_p3109(1)):\n",
    "    print(fi.name)\n",
    "    for i in (\n",
    "        0x00,\n",
    "        0x01,\n",
    "        0x07,\n",
    "        0x21,\n",
    "        0x40,\n",
    "        0x41,\n",
    "        0x7E,\n",
    "        0x7F,\n",
    "        0x80,\n",
    "        0x81,\n",
    "        0xE6,\n",
    "        0xFE,\n",
    "        0xFF,\n",
    "    ):\n",
    "        print(\n",
    "            str_tablerow(\n",
    "                fi, decode_float(fi, i), show_b16_info=True, vs_width=8, vs_d=4\n",
    "            )\n",
    "        )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Make HTML table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 49.0%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, ocp_e2m1</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_00_0 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x08 1_00_0 = -0.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_00_1 = +0b0.1*2^0   = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x09 1_00_1 = -0b0.1*2^0   = -0.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x02 0_01_0 = +0b1.0*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 1_01_0 = -0b1.0*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x03 0_01_1 = +0b1.1*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 1_01_1 = -0b1.1*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x04 0_10_0 = +0b1.0*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 1_10_0 = -0b1.0*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x05 0_10_1 = +0b1.1*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 1_10_1 = -0b1.1*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x06 0_11_0 = +0b1.0*2^2   = 4.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 1_11_0 = -0b1.0*2^2   = -4.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x07 0_11_1 = +0b1.1*2^2   = 6.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 1_11_1 = -0b1.1*2^2   = -6.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def mktbl(fi: FormatInfo, cols=4, skip_rows=None, **kw):\n",
    "    # Make tables\n",
    "    nvals = 2**fi.bits\n",
    "    rows = nvals // cols\n",
    "\n",
    "    style = f\"\"\"\n",
    "  div.cell_output td {{\n",
    "    margin: 0pt;\n",
    "    text-align: left;\n",
    "  }}\n",
    "\n",
    "  div.cell_output table {{\n",
    "    margin: 0pt;\n",
    "    text-align: left;\n",
    "    font-family: monospace;\n",
    "    font-size: xx-small;\n",
    "    font-weight: bold;\n",
    "    border-collapse: collapse;\n",
    "  }}\n",
    "\n",
    "  \n",
    "  table {{\n",
    "    margin: 0pt;\n",
    "    font-family: monospace;\n",
    "    font-size: xx-small;\n",
    "    font-weight: bold;\n",
    "    border-collapse: collapse;\n",
    "  }}\n",
    "\n",
    "  tr.blankrow {{\n",
    "    height: 4ex;\n",
    "    vertical-align: top;\n",
    "  }}\n",
    "  \n",
    "  td {{\n",
    "    text-align: left;\n",
    "    border: solid 2px #ccc;\n",
    "    width: {98/cols}%;\n",
    "  }}\n",
    "  \n",
    "  .special {{\n",
    "    color: #874723;\n",
    "  }}\n",
    "  \n",
    "  .subnormal {{\n",
    "    color: #0121a7;\n",
    "  }}\n",
    "  \n",
    "  .normal {{\n",
    "  }}\n",
    "  \n",
    "  @media (prefers-color-scheme: dark) {{\n",
    "    .special {{\n",
    "      color: orange;\n",
    "    }}\n",
    "\n",
    "    .subnormal {{\n",
    "      color: cyan;\n",
    "    }}\n",
    "    \n",
    "    .normal {{\n",
    "    }}\n",
    "  }}\n",
    "\n",
    "  pre {{\n",
    "    margin: 1pt 1pt 1pt 13pt;\n",
    "    display: inline;\n",
    "  }}\n",
    "\"\"\"\n",
    "\n",
    "    def table_style(fv):\n",
    "        \"\"\"\n",
    "        Select from the table entry styles defined in CSS above.\n",
    "        \"\"\"\n",
    "        if fv.fclass == FloatClass.SUBNORMAL:\n",
    "            return \"subnormal\"\n",
    "\n",
    "        if fv.fclass == FloatClass.NORMAL:\n",
    "            return \"normal\"\n",
    "\n",
    "        if fv.fclass == FloatClass.ZERO and not fv.signbit:\n",
    "            return \"normal\"\n",
    "\n",
    "        # Everyting else is special\n",
    "        return \"special\"\n",
    "\n",
    "    title = f\"FP8 Value Table, {fi.name}\"\n",
    "    a = airium.Airium()\n",
    "    a.style(_t=style)\n",
    "    a.h3(_t=title)\n",
    "\n",
    "    with a.table():\n",
    "        for i in range(0, rows):\n",
    "            if skip_rows and (skip_rows[0] <= i < skip_rows[1]):\n",
    "                if i == skip_rows[0]:\n",
    "                    a.tr(klass=\"blankrow\").td(\"...\")\n",
    "                continue\n",
    "            trklass = \"blankrow\" if i > 0 and i % 16 == 0 else \"\"\n",
    "            with a.tr(klass=trklass):\n",
    "                for n in range(i, nvals, rows):\n",
    "                    fv = decode_float(fi, n)\n",
    "                    text = str_tablerow(fi, fv, show_b16_info=False, **kw)\n",
    "                    a.td(klass=table_style(fv)).pre(_t=text)\n",
    "\n",
    "    return str(a)\n",
    "\n",
    "\n",
    "HTML(mktbl(format_info_ocp_e2m1, cols=2, vs_width=8, vs_d=3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### OCP E2M3\n",
    "\n",
    "This 6-bit format has 32 values, with no `NaN` or `Inf`, but does have `-0`.\n",
    "The positive subnormals are the linear ramp of eighths: [n/8 for n in 1:7].\n",
    "\n",
    "One might describe the format in text as:\n",
    "\n",
    "> zero to one by eighths, two to four by quarters, four to eight by halves\n",
    "\n",
    "where \"to\" is open-ended, or \"to\" is not \"thru\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 49.0%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, ocp_e2m3</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_00_000 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x20 1_00_000 = -0.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_00_001 = +0b0.001*2^0   = 0.125</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x21 1_00_001 = -0b0.001*2^0   = -0.125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x02 0_00_010 = +0b0.010*2^0   = 0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x22 1_00_010 = -0b0.010*2^0   = -0.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x03 0_00_011 = +0b0.011*2^0   = 0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x23 1_00_011 = -0b0.011*2^0   = -0.375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x04 0_00_100 = +0b0.100*2^0   = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x24 1_00_100 = -0b0.100*2^0   = -0.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x05 0_00_101 = +0b0.101*2^0   = 0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x25 1_00_101 = -0b0.101*2^0   = -0.625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x06 0_00_110 = +0b0.110*2^0   = 0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x26 1_00_110 = -0b0.110*2^0   = -0.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x07 0_00_111 = +0b0.111*2^0   = 0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x27 1_00_111 = -0b0.111*2^0   = -0.875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x08 0_01_000 = +0b1.000*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x28 1_01_000 = -0b1.000*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x09 0_01_001 = +0b1.001*2^0   = 1.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x29 1_01_001 = -0b1.001*2^0   = -1.125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 0_01_010 = +0b1.010*2^0   = 1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2a 1_01_010 = -0b1.010*2^0   = -1.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 0_01_011 = +0b1.011*2^0   = 1.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2b 1_01_011 = -0b1.011*2^0   = -1.375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 0_01_100 = +0b1.100*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2c 1_01_100 = -0b1.100*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 0_01_101 = +0b1.101*2^0   = 1.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2d 1_01_101 = -0b1.101*2^0   = -1.625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 0_01_110 = +0b1.110*2^0   = 1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2e 1_01_110 = -0b1.110*2^0   = -1.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 0_01_111 = +0b1.111*2^0   = 1.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2f 1_01_111 = -0b1.111*2^0   = -1.875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x10 0_10_000 = +0b1.000*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x30 1_10_000 = -0b1.000*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x11 0_10_001 = +0b1.001*2^1   = 2.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x31 1_10_001 = -0b1.001*2^1   = -2.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x12 0_10_010 = +0b1.010*2^1   = 2.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x32 1_10_010 = -0b1.010*2^1   = -2.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x13 0_10_011 = +0b1.011*2^1   = 2.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x33 1_10_011 = -0b1.011*2^1   = -2.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x14 0_10_100 = +0b1.100*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x34 1_10_100 = -0b1.100*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x15 0_10_101 = +0b1.101*2^1   = 3.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x35 1_10_101 = -0b1.101*2^1   = -3.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x16 0_10_110 = +0b1.110*2^1   = 3.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x36 1_10_110 = -0b1.110*2^1   = -3.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x17 0_10_111 = +0b1.111*2^1   = 3.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x37 1_10_111 = -0b1.111*2^1   = -3.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x18 0_11_000 = +0b1.000*2^2   = 4.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x38 1_11_000 = -0b1.000*2^2   = -4.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x19 0_11_001 = +0b1.001*2^2   = 4.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x39 1_11_001 = -0b1.001*2^2   = -4.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1a 0_11_010 = +0b1.010*2^2   = 5.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3a 1_11_010 = -0b1.010*2^2   = -5.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1b 0_11_011 = +0b1.011*2^2   = 5.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3b 1_11_011 = -0b1.011*2^2   = -5.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1c 0_11_100 = +0b1.100*2^2   = 6.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3c 1_11_100 = -0b1.100*2^2   = -6.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1d 0_11_101 = +0b1.101*2^2   = 6.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3d 1_11_101 = -0b1.101*2^2   = -6.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1e 0_11_110 = +0b1.110*2^2   = 7.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3e 1_11_110 = -0b1.110*2^2   = -7.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1f 0_11_111 = +0b1.111*2^2   = 7.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3f 1_11_111 = -0b1.111*2^2   = -7.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "HTML(mktbl(format_info_ocp_e2m3, cols=2, vs_width=8, vs_d=3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# And here's a 6-bit \"IEEE-754\" float:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 49.0%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, 754-fp6</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_000_00 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x20 1_000_00 = -0.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_000_01 = +0b0.01*2^-2  = 0.0625</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x21 1_000_01 = -0b0.01*2^-2  = -0.0625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x02 0_000_10 = +0b0.10*2^-2  = 0.125</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x22 1_000_10 = -0b0.10*2^-2  = -0.125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x03 0_000_11 = +0b0.11*2^-2  = 0.1875</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x23 1_000_11 = -0b0.11*2^-2  = -0.1875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x04 0_001_00 = +0b1.00*2^-2  = 0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x24 1_001_00 = -0b1.00*2^-2  = -0.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x05 0_001_01 = +0b1.01*2^-2  = 0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x25 1_001_01 = -0b1.01*2^-2  = -0.3125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x06 0_001_10 = +0b1.10*2^-2  = 0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x26 1_001_10 = -0b1.10*2^-2  = -0.375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x07 0_001_11 = +0b1.11*2^-2  = 0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x27 1_001_11 = -0b1.11*2^-2  = -0.4375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x08 0_010_00 = +0b1.00*2^-1  = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x28 1_010_00 = -0b1.00*2^-1  = -0.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x09 0_010_01 = +0b1.01*2^-1  = 0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x29 1_010_01 = -0b1.01*2^-1  = -0.625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 0_010_10 = +0b1.10*2^-1  = 0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2a 1_010_10 = -0b1.10*2^-1  = -0.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 0_010_11 = +0b1.11*2^-1  = 0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2b 1_010_11 = -0b1.11*2^-1  = -0.875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 0_011_00 = +0b1.00*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2c 1_011_00 = -0b1.00*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 0_011_01 = +0b1.01*2^0   = 1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2d 1_011_01 = -0b1.01*2^0   = -1.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 0_011_10 = +0b1.10*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2e 1_011_10 = -0b1.10*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 0_011_11 = +0b1.11*2^0   = 1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2f 1_011_11 = -0b1.11*2^0   = -1.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x10 0_100_00 = +0b1.00*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x30 1_100_00 = -0b1.00*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x11 0_100_01 = +0b1.01*2^1   = 2.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x31 1_100_01 = -0b1.01*2^1   = -2.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x12 0_100_10 = +0b1.10*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x32 1_100_10 = -0b1.10*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x13 0_100_11 = +0b1.11*2^1   = 3.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x33 1_100_11 = -0b1.11*2^1   = -3.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x14 0_101_00 = +0b1.00*2^2   = 4.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x34 1_101_00 = -0b1.00*2^2   = -4.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x15 0_101_01 = +0b1.01*2^2   = 5.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x35 1_101_01 = -0b1.01*2^2   = -5.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x16 0_101_10 = +0b1.10*2^2   = 6.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x36 1_101_10 = -0b1.10*2^2   = -6.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x17 0_101_11 = +0b1.11*2^2   = 7.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x37 1_101_11 = -0b1.11*2^2   = -7.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x18 0_110_00 = +0b1.00*2^3   = 8.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x38 1_110_00 = -0b1.00*2^3   = -8.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x19 0_110_01 = +0b1.01*2^3   = 10.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x39 1_110_01 = -0b1.01*2^3   = -10.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1a 0_110_10 = +0b1.10*2^3   = 12.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3a 1_110_10 = -0b1.10*2^3   = -12.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1b 0_110_11 = +0b1.11*2^3   = 14.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3b 1_110_11 = -0b1.11*2^3   = -14.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"special\">\n",
       "      <pre>0x1c 0_111_00 = inf</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x3c 1_111_00 = -inf</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"special\">\n",
       "      <pre>0x1d 0_111_01 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x3d 1_111_01 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"special\">\n",
       "      <pre>0x1e 0_111_10 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x3e 1_111_10 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"special\">\n",
       "      <pre>0x1f 0_111_11 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x3f 1_111_11 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from gfloat import FormatInfo\n",
    "\n",
    "fi = FormatInfo(\"754-fp6\", 6, 3, 3, True, True, 3, True, True, False)\n",
    "HTML(mktbl(fi, cols=2, vs_width=8, vs_d=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 49.0%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, P3109-fp6</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_000_00 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x20 1_000_00 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_000_01 = +0b0.01*2^-3  = 0.03125</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x21 1_000_01 = -0b0.01*2^-3  = -0.03125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x02 0_000_10 = +0b0.10*2^-3  = 0.0625</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x22 1_000_10 = -0b0.10*2^-3  = -0.0625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x03 0_000_11 = +0b0.11*2^-3  = 0.09375</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x23 1_000_11 = -0b0.11*2^-3  = -0.09375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x04 0_001_00 = +0b1.00*2^-3  = 0.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x24 1_001_00 = -0b1.00*2^-3  = -0.125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x05 0_001_01 = +0b1.01*2^-3  = 0.15625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x25 1_001_01 = -0b1.01*2^-3  = -0.15625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x06 0_001_10 = +0b1.10*2^-3  = 0.1875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x26 1_001_10 = -0b1.10*2^-3  = -0.1875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x07 0_001_11 = +0b1.11*2^-3  = 0.21875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x27 1_001_11 = -0b1.11*2^-3  = -0.21875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x08 0_010_00 = +0b1.00*2^-2  = 0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x28 1_010_00 = -0b1.00*2^-2  = -0.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x09 0_010_01 = +0b1.01*2^-2  = 0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x29 1_010_01 = -0b1.01*2^-2  = -0.3125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 0_010_10 = +0b1.10*2^-2  = 0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2a 1_010_10 = -0b1.10*2^-2  = -0.375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 0_010_11 = +0b1.11*2^-2  = 0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2b 1_010_11 = -0b1.11*2^-2  = -0.4375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 0_011_00 = +0b1.00*2^-1  = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2c 1_011_00 = -0b1.00*2^-1  = -0.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 0_011_01 = +0b1.01*2^-1  = 0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2d 1_011_01 = -0b1.01*2^-1  = -0.625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 0_011_10 = +0b1.10*2^-1  = 0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2e 1_011_10 = -0b1.10*2^-1  = -0.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 0_011_11 = +0b1.11*2^-1  = 0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2f 1_011_11 = -0b1.11*2^-1  = -0.875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x10 0_100_00 = +0b1.00*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x30 1_100_00 = -0b1.00*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x11 0_100_01 = +0b1.01*2^0   = 1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x31 1_100_01 = -0b1.01*2^0   = -1.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x12 0_100_10 = +0b1.10*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x32 1_100_10 = -0b1.10*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x13 0_100_11 = +0b1.11*2^0   = 1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x33 1_100_11 = -0b1.11*2^0   = -1.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x14 0_101_00 = +0b1.00*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x34 1_101_00 = -0b1.00*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x15 0_101_01 = +0b1.01*2^1   = 2.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x35 1_101_01 = -0b1.01*2^1   = -2.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x16 0_101_10 = +0b1.10*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x36 1_101_10 = -0b1.10*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x17 0_101_11 = +0b1.11*2^1   = 3.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x37 1_101_11 = -0b1.11*2^1   = -3.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x18 0_110_00 = +0b1.00*2^2   = 4.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x38 1_110_00 = -0b1.00*2^2   = -4.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x19 0_110_01 = +0b1.01*2^2   = 5.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x39 1_110_01 = -0b1.01*2^2   = -5.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1a 0_110_10 = +0b1.10*2^2   = 6.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3a 1_110_10 = -0b1.10*2^2   = -6.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1b 0_110_11 = +0b1.11*2^2   = 7.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3b 1_110_11 = -0b1.11*2^2   = -7.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1c 0_111_00 = +0b1.00*2^3   = 8.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3c 1_111_00 = -0b1.00*2^3   = -8.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1d 0_111_01 = +0b1.01*2^3   = 10.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3d 1_111_01 = -0b1.01*2^3   = -10.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1e 0_111_10 = +0b1.10*2^3   = 12.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3e 1_111_10 = -0b1.10*2^3   = -12.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"special\">\n",
       "      <pre>0x1f 0_111_11 = inf</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x3f 1_111_11 = -inf</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# P3109\n",
    "fi = FormatInfo(\"P3109-fp6\", 6, 3, 3, False, True, 0, True, True, False)\n",
    "HTML(mktbl(fi, cols=2, vs_width=8, vs_d=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 49.0%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, P3109-fp6</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_000_00 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x20 1_000_00 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_000_01 = +0b0.01*2^-3  = 0.03125</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x21 1_000_01 = -0b0.01*2^-3  = -0.03125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x02 0_000_10 = +0b0.10*2^-3  = 0.0625</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x22 1_000_10 = -0b0.10*2^-3  = -0.0625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x03 0_000_11 = +0b0.11*2^-3  = 0.09375</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x23 1_000_11 = -0b0.11*2^-3  = -0.09375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x04 0_001_00 = +0b1.00*2^-3  = 0.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x24 1_001_00 = -0b1.00*2^-3  = -0.125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x05 0_001_01 = +0b1.01*2^-3  = 0.15625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x25 1_001_01 = -0b1.01*2^-3  = -0.15625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x06 0_001_10 = +0b1.10*2^-3  = 0.1875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x26 1_001_10 = -0b1.10*2^-3  = -0.1875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x07 0_001_11 = +0b1.11*2^-3  = 0.21875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x27 1_001_11 = -0b1.11*2^-3  = -0.21875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x08 0_010_00 = +0b1.00*2^-2  = 0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x28 1_010_00 = -0b1.00*2^-2  = -0.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x09 0_010_01 = +0b1.01*2^-2  = 0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x29 1_010_01 = -0b1.01*2^-2  = -0.3125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 0_010_10 = +0b1.10*2^-2  = 0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2a 1_010_10 = -0b1.10*2^-2  = -0.375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 0_010_11 = +0b1.11*2^-2  = 0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2b 1_010_11 = -0b1.11*2^-2  = -0.4375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 0_011_00 = +0b1.00*2^-1  = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2c 1_011_00 = -0b1.00*2^-1  = -0.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 0_011_01 = +0b1.01*2^-1  = 0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2d 1_011_01 = -0b1.01*2^-1  = -0.625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 0_011_10 = +0b1.10*2^-1  = 0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2e 1_011_10 = -0b1.10*2^-1  = -0.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 0_011_11 = +0b1.11*2^-1  = 0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x2f 1_011_11 = -0b1.11*2^-1  = -0.875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x10 0_100_00 = +0b1.00*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x30 1_100_00 = -0b1.00*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x11 0_100_01 = +0b1.01*2^0   = 1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x31 1_100_01 = -0b1.01*2^0   = -1.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x12 0_100_10 = +0b1.10*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x32 1_100_10 = -0b1.10*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x13 0_100_11 = +0b1.11*2^0   = 1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x33 1_100_11 = -0b1.11*2^0   = -1.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x14 0_101_00 = +0b1.00*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x34 1_101_00 = -0b1.00*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x15 0_101_01 = +0b1.01*2^1   = 2.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x35 1_101_01 = -0b1.01*2^1   = -2.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x16 0_101_10 = +0b1.10*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x36 1_101_10 = -0b1.10*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x17 0_101_11 = +0b1.11*2^1   = 3.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x37 1_101_11 = -0b1.11*2^1   = -3.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x18 0_110_00 = +0b1.00*2^2   = 4.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x38 1_110_00 = -0b1.00*2^2   = -4.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x19 0_110_01 = +0b1.01*2^2   = 5.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x39 1_110_01 = -0b1.01*2^2   = -5.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1a 0_110_10 = +0b1.10*2^2   = 6.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3a 1_110_10 = -0b1.10*2^2   = -6.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1b 0_110_11 = +0b1.11*2^2   = 7.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3b 1_110_11 = -0b1.11*2^2   = -7.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1c 0_111_00 = +0b1.00*2^3   = 8.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3c 1_111_00 = -0b1.00*2^3   = -8.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1d 0_111_01 = +0b1.01*2^3   = 10.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3d 1_111_01 = -0b1.01*2^3   = -10.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1e 0_111_10 = +0b1.10*2^3   = 12.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3e 1_111_10 = -0b1.10*2^3   = -12.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x1f 0_111_11 = +0b1.11*2^3   = 14.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3f 1_111_11 = -0b1.11*2^3   = -14.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# P3109\n",
    "fi = FormatInfo(\"P3109-fp6\", 6, 3, 3, False, False, 0, True, True, False)\n",
    "HTML(mktbl(fi, cols=2, vs_width=8, vs_d=3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### OCP Formats: E5M2, E4M3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 24.5%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, ocp_e5m2</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_00000_00 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x40 0_10000_00 = +0b1.00*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x80 1_00000_00 = -0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc0 1_10000_00 = -0b1.00*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_00000_01 = +0b0.01*2^-14 = ~1.5259e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x41 0_10000_01 = +0b1.01*2^1   = 2.5</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x81 1_00000_01 = -0b0.01*2^-14 = ~-1.5259e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc1 1_10000_01 = -0b1.01*2^1   = -2.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x02 0_00000_10 = +0b0.10*2^-14 = ~3.0518e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x42 0_10000_10 = +0b1.10*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x82 1_00000_10 = -0b0.10*2^-14 = ~-3.0518e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc2 1_10000_10 = -0b1.10*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x03 0_00000_11 = +0b0.11*2^-14 = ~4.5776e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x43 0_10000_11 = +0b1.11*2^1   = 3.5</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x83 1_00000_11 = -0b0.11*2^-14 = ~-4.5776e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc3 1_10000_11 = -0b1.11*2^1   = -3.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x04 0_00001_00 = +0b1.00*2^-14 = ~6.1035e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x44 0_10001_00 = +0b1.00*2^2   = 4.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x84 1_00001_00 = -0b1.00*2^-14 = ~-6.1035e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc4 1_10001_00 = -0b1.00*2^2   = -4.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x05 0_00001_01 = +0b1.01*2^-14 = ~7.6294e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x45 0_10001_01 = +0b1.01*2^2   = 5.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x85 1_00001_01 = -0b1.01*2^-14 = ~-7.6294e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc5 1_10001_01 = -0b1.01*2^2   = -5.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x06 0_00001_10 = +0b1.10*2^-14 = ~9.1553e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x46 0_10001_10 = +0b1.10*2^2   = 6.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x86 1_00001_10 = -0b1.10*2^-14 = ~-9.1553e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc6 1_10001_10 = -0b1.10*2^2   = -6.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x07 0_00001_11 = +0b1.11*2^-14 = ~0.00011</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x47 0_10001_11 = +0b1.11*2^2   = 7.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x87 1_00001_11 = -0b1.11*2^-14 = ~-0.00011</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc7 1_10001_11 = -0b1.11*2^2   = -7.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x08 0_00010_00 = +0b1.00*2^-13 = ~0.00012</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x48 0_10010_00 = +0b1.00*2^3   = 8.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x88 1_00010_00 = -0b1.00*2^-13 = ~-0.00012</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc8 1_10010_00 = -0b1.00*2^3   = -8.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x09 0_00010_01 = +0b1.01*2^-13 = ~0.00015</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x49 0_10010_01 = +0b1.01*2^3   = 10.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x89 1_00010_01 = -0b1.01*2^-13 = ~-0.00015</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc9 1_10010_01 = -0b1.01*2^3   = -10.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 0_00010_10 = +0b1.10*2^-13 = ~0.00018</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4a 0_10010_10 = +0b1.10*2^3   = 12.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8a 1_00010_10 = -0b1.10*2^-13 = ~-0.00018</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xca 1_10010_10 = -0b1.10*2^3   = -12.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 0_00010_11 = +0b1.11*2^-13 = ~0.00021</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4b 0_10010_11 = +0b1.11*2^3   = 14.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8b 1_00010_11 = -0b1.11*2^-13 = ~-0.00021</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcb 1_10010_11 = -0b1.11*2^3   = -14.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 0_00011_00 = +0b1.00*2^-12 = ~0.00024</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4c 0_10011_00 = +0b1.00*2^4   = 16.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8c 1_00011_00 = -0b1.00*2^-12 = ~-0.00024</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcc 1_10011_00 = -0b1.00*2^4   = -16.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 0_00011_01 = +0b1.01*2^-12 = ~0.00031</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4d 0_10011_01 = +0b1.01*2^4   = 20.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8d 1_00011_01 = -0b1.01*2^-12 = ~-0.00031</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcd 1_10011_01 = -0b1.01*2^4   = -20.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 0_00011_10 = +0b1.10*2^-12 = ~0.00037</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4e 0_10011_10 = +0b1.10*2^4   = 24.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8e 1_00011_10 = -0b1.10*2^-12 = ~-0.00037</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xce 1_10011_10 = -0b1.10*2^4   = -24.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 0_00011_11 = +0b1.11*2^-12 = ~0.00043</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4f 0_10011_11 = +0b1.11*2^4   = 28.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8f 1_00011_11 = -0b1.11*2^-12 = ~-0.00043</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcf 1_10011_11 = -0b1.11*2^4   = -28.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td ...></td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x30 0_01100_00 = +0b1.00*2^-3  = 0.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x70 0_11100_00 = +0b1.00*2^13  = 8192.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb0 1_01100_00 = -0b1.00*2^-3  = -0.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf0 1_11100_00 = -0b1.00*2^13  = -8192.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x31 0_01100_01 = +0b1.01*2^-3  = 0.15625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x71 0_11100_01 = +0b1.01*2^13  = 10240.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb1 1_01100_01 = -0b1.01*2^-3  = -0.15625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf1 1_11100_01 = -0b1.01*2^13  = -10240.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x32 0_01100_10 = +0b1.10*2^-3  = 0.1875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x72 0_11100_10 = +0b1.10*2^13  = 12288.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb2 1_01100_10 = -0b1.10*2^-3  = -0.1875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf2 1_11100_10 = -0b1.10*2^13  = -12288.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x33 0_01100_11 = +0b1.11*2^-3  = 0.21875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x73 0_11100_11 = +0b1.11*2^13  = 14336.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb3 1_01100_11 = -0b1.11*2^-3  = -0.21875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf3 1_11100_11 = -0b1.11*2^13  = -14336.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x34 0_01101_00 = +0b1.00*2^-2  = 0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x74 0_11101_00 = +0b1.00*2^14  = 16384.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb4 1_01101_00 = -0b1.00*2^-2  = -0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf4 1_11101_00 = -0b1.00*2^14  = -16384.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x35 0_01101_01 = +0b1.01*2^-2  = 0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x75 0_11101_01 = +0b1.01*2^14  = 20480.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb5 1_01101_01 = -0b1.01*2^-2  = -0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf5 1_11101_01 = -0b1.01*2^14  = -20480.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x36 0_01101_10 = +0b1.10*2^-2  = 0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x76 0_11101_10 = +0b1.10*2^14  = 24576.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb6 1_01101_10 = -0b1.10*2^-2  = -0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf6 1_11101_10 = -0b1.10*2^14  = -24576.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x37 0_01101_11 = +0b1.11*2^-2  = 0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x77 0_11101_11 = +0b1.11*2^14  = 28672.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb7 1_01101_11 = -0b1.11*2^-2  = -0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf7 1_11101_11 = -0b1.11*2^14  = -28672.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x38 0_01110_00 = +0b1.00*2^-1  = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x78 0_11110_00 = +0b1.00*2^15  = 32768.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb8 1_01110_00 = -0b1.00*2^-1  = -0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf8 1_11110_00 = -0b1.00*2^15  = -32768.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x39 0_01110_01 = +0b1.01*2^-1  = 0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x79 0_11110_01 = +0b1.01*2^15  = 40960.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb9 1_01110_01 = -0b1.01*2^-1  = -0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf9 1_11110_01 = -0b1.01*2^15  = -40960.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3a 0_01110_10 = +0b1.10*2^-1  = 0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7a 0_11110_10 = +0b1.10*2^15  = 49152.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xba 1_01110_10 = -0b1.10*2^-1  = -0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfa 1_11110_10 = -0b1.10*2^15  = -49152.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3b 0_01110_11 = +0b1.11*2^-1  = 0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7b 0_11110_11 = +0b1.11*2^15  = 57344.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbb 1_01110_11 = -0b1.11*2^-1  = -0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfb 1_11110_11 = -0b1.11*2^15  = -57344.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3c 0_01111_00 = +0b1.00*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x7c 0_11111_00 = inf</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbc 1_01111_00 = -0b1.00*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0xfc 1_11111_00 = -inf</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3d 0_01111_01 = +0b1.01*2^0   = 1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x7d 0_11111_01 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbd 1_01111_01 = -0b1.01*2^0   = -1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0xfd 1_11111_01 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3e 0_01111_10 = +0b1.10*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x7e 0_11111_10 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbe 1_01111_10 = -0b1.10*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0xfe 1_11111_10 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3f 0_01111_11 = +0b1.11*2^0   = 1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x7f 0_11111_11 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbf 1_01111_11 = -0b1.11*2^0   = -1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0xff 1_11111_11 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "HTML(mktbl(format_info_ocp_e5m2, cols=4, skip_rows=(0x10, 0x30), vs_width=8, vs_d=5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 24.5%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, ocp_e4m3</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_0000_000 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x40 0_1000_000 = +0b1.000*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x80 1_0000_000 = -0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc0 1_1000_000 = -0b1.000*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_0000_001 = +0b0.001*2^-6  = ~0.00195</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x41 0_1000_001 = +0b1.001*2^1   = 2.25</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x81 1_0000_001 = -0b0.001*2^-6  = ~-0.00195</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc1 1_1000_001 = -0b1.001*2^1   = -2.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x02 0_0000_010 = +0b0.010*2^-6  = ~0.00391</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x42 0_1000_010 = +0b1.010*2^1   = 2.5</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x82 1_0000_010 = -0b0.010*2^-6  = ~-0.00391</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc2 1_1000_010 = -0b1.010*2^1   = -2.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x03 0_0000_011 = +0b0.011*2^-6  = ~0.00586</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x43 0_1000_011 = +0b1.011*2^1   = 2.75</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x83 1_0000_011 = -0b0.011*2^-6  = ~-0.00586</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc3 1_1000_011 = -0b1.011*2^1   = -2.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x04 0_0000_100 = +0b0.100*2^-6  = ~0.00781</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x44 0_1000_100 = +0b1.100*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x84 1_0000_100 = -0b0.100*2^-6  = ~-0.00781</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc4 1_1000_100 = -0b1.100*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x05 0_0000_101 = +0b0.101*2^-6  = ~0.00977</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x45 0_1000_101 = +0b1.101*2^1   = 3.25</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x85 1_0000_101 = -0b0.101*2^-6  = ~-0.00977</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc5 1_1000_101 = -0b1.101*2^1   = -3.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x06 0_0000_110 = +0b0.110*2^-6  = ~0.01172</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x46 0_1000_110 = +0b1.110*2^1   = 3.5</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x86 1_0000_110 = -0b0.110*2^-6  = ~-0.01172</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc6 1_1000_110 = -0b1.110*2^1   = -3.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x07 0_0000_111 = +0b0.111*2^-6  = ~0.01367</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x47 0_1000_111 = +0b1.111*2^1   = 3.75</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x87 1_0000_111 = -0b0.111*2^-6  = ~-0.01367</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc7 1_1000_111 = -0b1.111*2^1   = -3.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x08 0_0001_000 = +0b1.000*2^-6  = 0.015625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x48 0_1001_000 = +0b1.000*2^2   = 4.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x88 1_0001_000 = -0b1.000*2^-6  = ~-0.01562</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc8 1_1001_000 = -0b1.000*2^2   = -4.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x09 0_0001_001 = +0b1.001*2^-6  = ~0.01758</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x49 0_1001_001 = +0b1.001*2^2   = 4.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x89 1_0001_001 = -0b1.001*2^-6  = ~-0.01758</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc9 1_1001_001 = -0b1.001*2^2   = -4.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 0_0001_010 = +0b1.010*2^-6  = ~0.01953</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4a 0_1001_010 = +0b1.010*2^2   = 5.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8a 1_0001_010 = -0b1.010*2^-6  = ~-0.01953</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xca 1_1001_010 = -0b1.010*2^2   = -5.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 0_0001_011 = +0b1.011*2^-6  = ~0.02148</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4b 0_1001_011 = +0b1.011*2^2   = 5.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8b 1_0001_011 = -0b1.011*2^-6  = ~-0.02148</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcb 1_1001_011 = -0b1.011*2^2   = -5.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 0_0001_100 = +0b1.100*2^-6  = ~0.02344</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4c 0_1001_100 = +0b1.100*2^2   = 6.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8c 1_0001_100 = -0b1.100*2^-6  = ~-0.02344</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcc 1_1001_100 = -0b1.100*2^2   = -6.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 0_0001_101 = +0b1.101*2^-6  = ~0.02539</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4d 0_1001_101 = +0b1.101*2^2   = 6.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8d 1_0001_101 = -0b1.101*2^-6  = ~-0.02539</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcd 1_1001_101 = -0b1.101*2^2   = -6.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 0_0001_110 = +0b1.110*2^-6  = ~0.02734</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4e 0_1001_110 = +0b1.110*2^2   = 7.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8e 1_0001_110 = -0b1.110*2^-6  = ~-0.02734</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xce 1_1001_110 = -0b1.110*2^2   = -7.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 0_0001_111 = +0b1.111*2^-6  = ~0.02930</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4f 0_1001_111 = +0b1.111*2^2   = 7.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8f 1_0001_111 = -0b1.111*2^-6  = ~-0.02930</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcf 1_1001_111 = -0b1.111*2^2   = -7.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td ...></td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x30 0_0110_000 = +0b1.000*2^-1  = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x70 0_1110_000 = +0b1.000*2^7   = 128.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb0 1_0110_000 = -0b1.000*2^-1  = -0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf0 1_1110_000 = -0b1.000*2^7   = -128.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x31 0_0110_001 = +0b1.001*2^-1  = 0.5625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x71 0_1110_001 = +0b1.001*2^7   = 144.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb1 1_0110_001 = -0b1.001*2^-1  = -0.5625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf1 1_1110_001 = -0b1.001*2^7   = -144.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x32 0_0110_010 = +0b1.010*2^-1  = 0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x72 0_1110_010 = +0b1.010*2^7   = 160.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb2 1_0110_010 = -0b1.010*2^-1  = -0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf2 1_1110_010 = -0b1.010*2^7   = -160.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x33 0_0110_011 = +0b1.011*2^-1  = 0.6875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x73 0_1110_011 = +0b1.011*2^7   = 176.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb3 1_0110_011 = -0b1.011*2^-1  = -0.6875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf3 1_1110_011 = -0b1.011*2^7   = -176.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x34 0_0110_100 = +0b1.100*2^-1  = 0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x74 0_1110_100 = +0b1.100*2^7   = 192.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb4 1_0110_100 = -0b1.100*2^-1  = -0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf4 1_1110_100 = -0b1.100*2^7   = -192.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x35 0_0110_101 = +0b1.101*2^-1  = 0.8125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x75 0_1110_101 = +0b1.101*2^7   = 208.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb5 1_0110_101 = -0b1.101*2^-1  = -0.8125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf5 1_1110_101 = -0b1.101*2^7   = -208.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x36 0_0110_110 = +0b1.110*2^-1  = 0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x76 0_1110_110 = +0b1.110*2^7   = 224.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb6 1_0110_110 = -0b1.110*2^-1  = -0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf6 1_1110_110 = -0b1.110*2^7   = -224.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x37 0_0110_111 = +0b1.111*2^-1  = 0.9375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x77 0_1110_111 = +0b1.111*2^7   = 240.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb7 1_0110_111 = -0b1.111*2^-1  = -0.9375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf7 1_1110_111 = -0b1.111*2^7   = -240.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x38 0_0111_000 = +0b1.000*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x78 0_1111_000 = +0b1.000*2^8   = 256.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb8 1_0111_000 = -0b1.000*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf8 1_1111_000 = -0b1.000*2^8   = -256.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x39 0_0111_001 = +0b1.001*2^0   = 1.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x79 0_1111_001 = +0b1.001*2^8   = 288.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb9 1_0111_001 = -0b1.001*2^0   = -1.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf9 1_1111_001 = -0b1.001*2^8   = -288.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3a 0_0111_010 = +0b1.010*2^0   = 1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7a 0_1111_010 = +0b1.010*2^8   = 320.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xba 1_0111_010 = -0b1.010*2^0   = -1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfa 1_1111_010 = -0b1.010*2^8   = -320.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3b 0_0111_011 = +0b1.011*2^0   = 1.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7b 0_1111_011 = +0b1.011*2^8   = 352.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbb 1_0111_011 = -0b1.011*2^0   = -1.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfb 1_1111_011 = -0b1.011*2^8   = -352.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3c 0_0111_100 = +0b1.100*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7c 0_1111_100 = +0b1.100*2^8   = 384.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbc 1_0111_100 = -0b1.100*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfc 1_1111_100 = -0b1.100*2^8   = -384.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3d 0_0111_101 = +0b1.101*2^0   = 1.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7d 0_1111_101 = +0b1.101*2^8   = 416.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbd 1_0111_101 = -0b1.101*2^0   = -1.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfd 1_1111_101 = -0b1.101*2^8   = -416.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3e 0_0111_110 = +0b1.110*2^0   = 1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7e 0_1111_110 = +0b1.110*2^8   = 448.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbe 1_0111_110 = -0b1.110*2^0   = -1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfe 1_1111_110 = -0b1.110*2^8   = -448.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3f 0_0111_111 = +0b1.111*2^0   = 1.875</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x7f 0_1111_111 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbf 1_0111_111 = -0b1.111*2^0   = -1.875</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0xff 1_1111_111 = nan</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "HTML(mktbl(format_info_ocp_e4m3, cols=4, skip_rows=(0x10, 0x30), vs_width=8, vs_d=5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### IEEE WG P3109 {P} formats\n",
    "\n",
    "We choose just one example: `p3109(p=3)`, which has the same number of exponent bits as OCP E5 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 24.5%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, p3109_p3</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_00000_00 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x40 0_10000_00 = +0b1.00*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x80 1_00000_00 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc0 1_10000_00 = -0b1.00*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_00000_01 = +0b0.01*2^-15 = ~7.6294e-06</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x41 0_10000_01 = +0b1.01*2^0   = 1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x81 1_00000_01 = -0b0.01*2^-15 = ~-7.6294e-06</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc1 1_10000_01 = -0b1.01*2^0   = -1.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x02 0_00000_10 = +0b0.10*2^-15 = ~1.5259e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x42 0_10000_10 = +0b1.10*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x82 1_00000_10 = -0b0.10*2^-15 = ~-1.5259e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc2 1_10000_10 = -0b1.10*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x03 0_00000_11 = +0b0.11*2^-15 = ~2.2888e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x43 0_10000_11 = +0b1.11*2^0   = 1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x83 1_00000_11 = -0b0.11*2^-15 = ~-2.2888e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc3 1_10000_11 = -0b1.11*2^0   = -1.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x04 0_00001_00 = +0b1.00*2^-15 = ~3.0518e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x44 0_10001_00 = +0b1.00*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x84 1_00001_00 = -0b1.00*2^-15 = ~-3.0518e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc4 1_10001_00 = -0b1.00*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x05 0_00001_01 = +0b1.01*2^-15 = ~3.8147e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x45 0_10001_01 = +0b1.01*2^1   = 2.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x85 1_00001_01 = -0b1.01*2^-15 = ~-3.8147e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc5 1_10001_01 = -0b1.01*2^1   = -2.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x06 0_00001_10 = +0b1.10*2^-15 = ~4.5776e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x46 0_10001_10 = +0b1.10*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x86 1_00001_10 = -0b1.10*2^-15 = ~-4.5776e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc6 1_10001_10 = -0b1.10*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x07 0_00001_11 = +0b1.11*2^-15 = ~5.3406e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x47 0_10001_11 = +0b1.11*2^1   = 3.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x87 1_00001_11 = -0b1.11*2^-15 = ~-5.3406e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc7 1_10001_11 = -0b1.11*2^1   = -3.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x08 0_00010_00 = +0b1.00*2^-14 = ~6.1035e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x48 0_10010_00 = +0b1.00*2^2   = 4.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x88 1_00010_00 = -0b1.00*2^-14 = ~-6.1035e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc8 1_10010_00 = -0b1.00*2^2   = -4.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x09 0_00010_01 = +0b1.01*2^-14 = ~7.6294e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x49 0_10010_01 = +0b1.01*2^2   = 5.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x89 1_00010_01 = -0b1.01*2^-14 = ~-7.6294e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc9 1_10010_01 = -0b1.01*2^2   = -5.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 0_00010_10 = +0b1.10*2^-14 = ~9.1553e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4a 0_10010_10 = +0b1.10*2^2   = 6.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8a 1_00010_10 = -0b1.10*2^-14 = ~-9.1553e-05</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xca 1_10010_10 = -0b1.10*2^2   = -6.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 0_00010_11 = +0b1.11*2^-14 = ~0.00011</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4b 0_10010_11 = +0b1.11*2^2   = 7.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8b 1_00010_11 = -0b1.11*2^-14 = ~-0.00011</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcb 1_10010_11 = -0b1.11*2^2   = -7.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 0_00011_00 = +0b1.00*2^-13 = ~0.00012</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4c 0_10011_00 = +0b1.00*2^3   = 8.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8c 1_00011_00 = -0b1.00*2^-13 = ~-0.00012</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcc 1_10011_00 = -0b1.00*2^3   = -8.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 0_00011_01 = +0b1.01*2^-13 = ~0.00015</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4d 0_10011_01 = +0b1.01*2^3   = 10.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8d 1_00011_01 = -0b1.01*2^-13 = ~-0.00015</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcd 1_10011_01 = -0b1.01*2^3   = -10.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 0_00011_10 = +0b1.10*2^-13 = ~0.00018</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4e 0_10011_10 = +0b1.10*2^3   = 12.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8e 1_00011_10 = -0b1.10*2^-13 = ~-0.00018</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xce 1_10011_10 = -0b1.10*2^3   = -12.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 0_00011_11 = +0b1.11*2^-13 = ~0.00021</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4f 0_10011_11 = +0b1.11*2^3   = 14.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8f 1_00011_11 = -0b1.11*2^-13 = ~-0.00021</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcf 1_10011_11 = -0b1.11*2^3   = -14.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td ...></td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x30 0_01100_00 = +0b1.00*2^-4  = 0.0625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x70 0_11100_00 = +0b1.00*2^12  = 4096.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb0 1_01100_00 = -0b1.00*2^-4  = -0.0625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf0 1_11100_00 = -0b1.00*2^12  = -4096.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x31 0_01100_01 = +0b1.01*2^-4  = 0.078125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x71 0_11100_01 = +0b1.01*2^12  = 5120.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb1 1_01100_01 = -0b1.01*2^-4  = ~-0.07812</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf1 1_11100_01 = -0b1.01*2^12  = -5120.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x32 0_01100_10 = +0b1.10*2^-4  = 0.09375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x72 0_11100_10 = +0b1.10*2^12  = 6144.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb2 1_01100_10 = -0b1.10*2^-4  = -0.09375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf2 1_11100_10 = -0b1.10*2^12  = -6144.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x33 0_01100_11 = +0b1.11*2^-4  = 0.109375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x73 0_11100_11 = +0b1.11*2^12  = 7168.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb3 1_01100_11 = -0b1.11*2^-4  = ~-0.10938</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf3 1_11100_11 = -0b1.11*2^12  = -7168.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x34 0_01101_00 = +0b1.00*2^-3  = 0.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x74 0_11101_00 = +0b1.00*2^13  = 8192.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb4 1_01101_00 = -0b1.00*2^-3  = -0.125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf4 1_11101_00 = -0b1.00*2^13  = -8192.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x35 0_01101_01 = +0b1.01*2^-3  = 0.15625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x75 0_11101_01 = +0b1.01*2^13  = 10240.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb5 1_01101_01 = -0b1.01*2^-3  = -0.15625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf5 1_11101_01 = -0b1.01*2^13  = -10240.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x36 0_01101_10 = +0b1.10*2^-3  = 0.1875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x76 0_11101_10 = +0b1.10*2^13  = 12288.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb6 1_01101_10 = -0b1.10*2^-3  = -0.1875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf6 1_11101_10 = -0b1.10*2^13  = -12288.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x37 0_01101_11 = +0b1.11*2^-3  = 0.21875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x77 0_11101_11 = +0b1.11*2^13  = 14336.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb7 1_01101_11 = -0b1.11*2^-3  = -0.21875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf7 1_11101_11 = -0b1.11*2^13  = -14336.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x38 0_01110_00 = +0b1.00*2^-2  = 0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x78 0_11110_00 = +0b1.00*2^14  = 16384.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb8 1_01110_00 = -0b1.00*2^-2  = -0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf8 1_11110_00 = -0b1.00*2^14  = -16384.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x39 0_01110_01 = +0b1.01*2^-2  = 0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x79 0_11110_01 = +0b1.01*2^14  = 20480.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb9 1_01110_01 = -0b1.01*2^-2  = -0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf9 1_11110_01 = -0b1.01*2^14  = -20480.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3a 0_01110_10 = +0b1.10*2^-2  = 0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7a 0_11110_10 = +0b1.10*2^14  = 24576.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xba 1_01110_10 = -0b1.10*2^-2  = -0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfa 1_11110_10 = -0b1.10*2^14  = -24576.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3b 0_01110_11 = +0b1.11*2^-2  = 0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7b 0_11110_11 = +0b1.11*2^14  = 28672.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbb 1_01110_11 = -0b1.11*2^-2  = -0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfb 1_11110_11 = -0b1.11*2^14  = -28672.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3c 0_01111_00 = +0b1.00*2^-1  = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7c 0_11111_00 = +0b1.00*2^15  = 32768.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbc 1_01111_00 = -0b1.00*2^-1  = -0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfc 1_11111_00 = -0b1.00*2^15  = -32768.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3d 0_01111_01 = +0b1.01*2^-1  = 0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7d 0_11111_01 = +0b1.01*2^15  = 40960.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbd 1_01111_01 = -0b1.01*2^-1  = -0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfd 1_11111_01 = -0b1.01*2^15  = -40960.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3e 0_01111_10 = +0b1.10*2^-1  = 0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7e 0_11111_10 = +0b1.10*2^15  = 49152.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbe 1_01111_10 = -0b1.10*2^-1  = -0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfe 1_11111_10 = -0b1.10*2^15  = -49152.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3f 0_01111_11 = +0b1.11*2^-1  = 0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x7f 0_11111_11 = inf</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbf 1_01111_11 = -0b1.11*2^-1  = -0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0xff 1_11111_11 = -inf</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "HTML(mktbl(format_info_p3109(3), cols=4, skip_rows=(0x10, 0x30), vs_width=8, vs_d=5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>\n",
       "  div.cell_output td {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "  }\n",
       "\n",
       "  div.cell_output table {\n",
       "    margin: 0pt;\n",
       "    text-align: left;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  \n",
       "  table {\n",
       "    margin: 0pt;\n",
       "    font-family: monospace;\n",
       "    font-size: xx-small;\n",
       "    font-weight: bold;\n",
       "    border-collapse: collapse;\n",
       "  }\n",
       "\n",
       "  tr.blankrow {\n",
       "    height: 4ex;\n",
       "    vertical-align: top;\n",
       "  }\n",
       "  \n",
       "  td {\n",
       "    text-align: left;\n",
       "    border: solid 2px #ccc;\n",
       "    width: 24.5%;\n",
       "  }\n",
       "  \n",
       "  .special {\n",
       "    color: #874723;\n",
       "  }\n",
       "  \n",
       "  .subnormal {\n",
       "    color: #0121a7;\n",
       "  }\n",
       "  \n",
       "  .normal {\n",
       "  }\n",
       "  \n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    .special {\n",
       "      color: orange;\n",
       "    }\n",
       "\n",
       "    .subnormal {\n",
       "      color: cyan;\n",
       "    }\n",
       "    \n",
       "    .normal {\n",
       "    }\n",
       "  }\n",
       "\n",
       "  pre {\n",
       "    margin: 1pt 1pt 1pt 13pt;\n",
       "    display: inline;\n",
       "  }\n",
       "</style>\n",
       "<h3>FP8 Value Table, p3109_p4</h3>\n",
       "<table>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x00 0_0000_000 = 0.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x40 0_1000_000 = +0b1.000*2^0   = 1.0</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x80 1_0000_000 = nan</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc0 1_1000_000 = -0b1.000*2^0   = -1.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x01 0_0000_001 = +0b0.001*2^-7  = ~0.00098</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x41 0_1000_001 = +0b1.001*2^0   = 1.125</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x81 1_0000_001 = -0b0.001*2^-7  = ~-0.00098</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc1 1_1000_001 = -0b1.001*2^0   = -1.125</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x02 0_0000_010 = +0b0.010*2^-7  = ~0.00195</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x42 0_1000_010 = +0b1.010*2^0   = 1.25</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x82 1_0000_010 = -0b0.010*2^-7  = ~-0.00195</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc2 1_1000_010 = -0b1.010*2^0   = -1.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x03 0_0000_011 = +0b0.011*2^-7  = ~0.00293</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x43 0_1000_011 = +0b1.011*2^0   = 1.375</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x83 1_0000_011 = -0b0.011*2^-7  = ~-0.00293</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc3 1_1000_011 = -0b1.011*2^0   = -1.375</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x04 0_0000_100 = +0b0.100*2^-7  = ~0.00391</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x44 0_1000_100 = +0b1.100*2^0   = 1.5</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x84 1_0000_100 = -0b0.100*2^-7  = ~-0.00391</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc4 1_1000_100 = -0b1.100*2^0   = -1.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x05 0_0000_101 = +0b0.101*2^-7  = ~0.00488</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x45 0_1000_101 = +0b1.101*2^0   = 1.625</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x85 1_0000_101 = -0b0.101*2^-7  = ~-0.00488</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc5 1_1000_101 = -0b1.101*2^0   = -1.625</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x06 0_0000_110 = +0b0.110*2^-7  = ~0.00586</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x46 0_1000_110 = +0b1.110*2^0   = 1.75</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x86 1_0000_110 = -0b0.110*2^-7  = ~-0.00586</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc6 1_1000_110 = -0b1.110*2^0   = -1.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x07 0_0000_111 = +0b0.111*2^-7  = ~0.00684</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x47 0_1000_111 = +0b1.111*2^0   = 1.875</pre>\n",
       "    </td>\n",
       "    <td class=\"subnormal\">\n",
       "      <pre>0x87 1_0000_111 = -0b0.111*2^-7  = ~-0.00684</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc7 1_1000_111 = -0b1.111*2^0   = -1.875</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x08 0_0001_000 = +0b1.000*2^-7  = ~0.00781</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x48 0_1001_000 = +0b1.000*2^1   = 2.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x88 1_0001_000 = -0b1.000*2^-7  = ~-0.00781</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc8 1_1001_000 = -0b1.000*2^1   = -2.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x09 0_0001_001 = +0b1.001*2^-7  = ~0.00879</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x49 0_1001_001 = +0b1.001*2^1   = 2.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x89 1_0001_001 = -0b1.001*2^-7  = ~-0.00879</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xc9 1_1001_001 = -0b1.001*2^1   = -2.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0a 0_0001_010 = +0b1.010*2^-7  = ~0.00977</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4a 0_1001_010 = +0b1.010*2^1   = 2.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8a 1_0001_010 = -0b1.010*2^-7  = ~-0.00977</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xca 1_1001_010 = -0b1.010*2^1   = -2.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0b 0_0001_011 = +0b1.011*2^-7  = ~0.01074</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4b 0_1001_011 = +0b1.011*2^1   = 2.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8b 1_0001_011 = -0b1.011*2^-7  = ~-0.01074</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcb 1_1001_011 = -0b1.011*2^1   = -2.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0c 0_0001_100 = +0b1.100*2^-7  = ~0.01172</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4c 0_1001_100 = +0b1.100*2^1   = 3.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8c 1_0001_100 = -0b1.100*2^-7  = ~-0.01172</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcc 1_1001_100 = -0b1.100*2^1   = -3.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0d 0_0001_101 = +0b1.101*2^-7  = ~0.01270</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4d 0_1001_101 = +0b1.101*2^1   = 3.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8d 1_0001_101 = -0b1.101*2^-7  = ~-0.01270</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcd 1_1001_101 = -0b1.101*2^1   = -3.25</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0e 0_0001_110 = +0b1.110*2^-7  = ~0.01367</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4e 0_1001_110 = +0b1.110*2^1   = 3.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8e 1_0001_110 = -0b1.110*2^-7  = ~-0.01367</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xce 1_1001_110 = -0b1.110*2^1   = -3.5</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x0f 0_0001_111 = +0b1.111*2^-7  = ~0.01465</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x4f 0_1001_111 = +0b1.111*2^1   = 3.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x8f 1_0001_111 = -0b1.111*2^-7  = ~-0.01465</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xcf 1_1001_111 = -0b1.111*2^1   = -3.75</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td ...></td>\n",
       "  </tr>\n",
       "  <tr class=\"blankrow\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x30 0_0110_000 = +0b1.000*2^-2  = 0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x70 0_1110_000 = +0b1.000*2^6   = 64.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb0 1_0110_000 = -0b1.000*2^-2  = -0.25</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf0 1_1110_000 = -0b1.000*2^6   = -64.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x31 0_0110_001 = +0b1.001*2^-2  = 0.28125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x71 0_1110_001 = +0b1.001*2^6   = 72.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb1 1_0110_001 = -0b1.001*2^-2  = -0.28125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf1 1_1110_001 = -0b1.001*2^6   = -72.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x32 0_0110_010 = +0b1.010*2^-2  = 0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x72 0_1110_010 = +0b1.010*2^6   = 80.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb2 1_0110_010 = -0b1.010*2^-2  = -0.3125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf2 1_1110_010 = -0b1.010*2^6   = -80.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x33 0_0110_011 = +0b1.011*2^-2  = 0.34375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x73 0_1110_011 = +0b1.011*2^6   = 88.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb3 1_0110_011 = -0b1.011*2^-2  = -0.34375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf3 1_1110_011 = -0b1.011*2^6   = -88.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x34 0_0110_100 = +0b1.100*2^-2  = 0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x74 0_1110_100 = +0b1.100*2^6   = 96.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb4 1_0110_100 = -0b1.100*2^-2  = -0.375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf4 1_1110_100 = -0b1.100*2^6   = -96.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x35 0_0110_101 = +0b1.101*2^-2  = 0.40625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x75 0_1110_101 = +0b1.101*2^6   = 104.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb5 1_0110_101 = -0b1.101*2^-2  = -0.40625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf5 1_1110_101 = -0b1.101*2^6   = -104.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x36 0_0110_110 = +0b1.110*2^-2  = 0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x76 0_1110_110 = +0b1.110*2^6   = 112.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb6 1_0110_110 = -0b1.110*2^-2  = -0.4375</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf6 1_1110_110 = -0b1.110*2^6   = -112.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x37 0_0110_111 = +0b1.111*2^-2  = 0.46875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x77 0_1110_111 = +0b1.111*2^6   = 120.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb7 1_0110_111 = -0b1.111*2^-2  = -0.46875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf7 1_1110_111 = -0b1.111*2^6   = -120.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x38 0_0111_000 = +0b1.000*2^-1  = 0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x78 0_1111_000 = +0b1.000*2^7   = 128.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb8 1_0111_000 = -0b1.000*2^-1  = -0.5</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf8 1_1111_000 = -0b1.000*2^7   = -128.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x39 0_0111_001 = +0b1.001*2^-1  = 0.5625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x79 0_1111_001 = +0b1.001*2^7   = 144.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xb9 1_0111_001 = -0b1.001*2^-1  = -0.5625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xf9 1_1111_001 = -0b1.001*2^7   = -144.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3a 0_0111_010 = +0b1.010*2^-1  = 0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7a 0_1111_010 = +0b1.010*2^7   = 160.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xba 1_0111_010 = -0b1.010*2^-1  = -0.625</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfa 1_1111_010 = -0b1.010*2^7   = -160.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3b 0_0111_011 = +0b1.011*2^-1  = 0.6875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7b 0_1111_011 = +0b1.011*2^7   = 176.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbb 1_0111_011 = -0b1.011*2^-1  = -0.6875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfb 1_1111_011 = -0b1.011*2^7   = -176.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3c 0_0111_100 = +0b1.100*2^-1  = 0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7c 0_1111_100 = +0b1.100*2^7   = 192.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbc 1_0111_100 = -0b1.100*2^-1  = -0.75</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfc 1_1111_100 = -0b1.100*2^7   = -192.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3d 0_0111_101 = +0b1.101*2^-1  = 0.8125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7d 0_1111_101 = +0b1.101*2^7   = 208.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbd 1_0111_101 = -0b1.101*2^-1  = -0.8125</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfd 1_1111_101 = -0b1.101*2^7   = -208.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3e 0_0111_110 = +0b1.110*2^-1  = 0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x7e 0_1111_110 = +0b1.110*2^7   = 224.0</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbe 1_0111_110 = -0b1.110*2^-1  = -0.875</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xfe 1_1111_110 = -0b1.110*2^7   = -224.0</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "  <tr class=\"\">\n",
       "    <td class=\"normal\">\n",
       "      <pre>0x3f 0_0111_111 = +0b1.111*2^-1  = 0.9375</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0x7f 0_1111_111 = inf</pre>\n",
       "    </td>\n",
       "    <td class=\"normal\">\n",
       "      <pre>0xbf 1_0111_111 = -0b1.111*2^-1  = -0.9375</pre>\n",
       "    </td>\n",
       "    <td class=\"special\">\n",
       "      <pre>0xff 1_1111_111 = -inf</pre>\n",
       "    </td>\n",
       "  </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "HTML(mktbl(format_info_p3109(4), cols=4, skip_rows=(0x10, 0x30), vs_width=8, vs_d=5))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
