{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\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 \"\"\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\"\", \"\"\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 = = ~2.168e-19\n", "0x07 0_0000111_ = +0b1.0*2^-56 = = ~1.388e-17\n", "0x21 0_0100001_ = +0b1.0*2^-30 = = ~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 = = ~-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": [ "\n", "

FP8 Value Table, ocp_e2m1

\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
0x00 0_00_0 = 0.0
\n", "
\n", "
0x08 1_00_0 = -0.0
\n", "
\n", "
0x01 0_00_1 = +0b0.1*2^0   = 0.5
\n", "
\n", "
0x09 1_00_1 = -0b0.1*2^0   = -0.5
\n", "
\n", "
0x02 0_01_0 = +0b1.0*2^0   = 1.0
\n", "
\n", "
0x0a 1_01_0 = -0b1.0*2^0   = -1.0
\n", "
\n", "
0x03 0_01_1 = +0b1.1*2^0   = 1.5
\n", "
\n", "
0x0b 1_01_1 = -0b1.1*2^0   = -1.5
\n", "
\n", "
0x04 0_10_0 = +0b1.0*2^1   = 2.0
\n", "
\n", "
0x0c 1_10_0 = -0b1.0*2^1   = -2.0
\n", "
\n", "
0x05 0_10_1 = +0b1.1*2^1   = 3.0
\n", "
\n", "
0x0d 1_10_1 = -0b1.1*2^1   = -3.0
\n", "
\n", "
0x06 0_11_0 = +0b1.0*2^2   = 4.0
\n", "
\n", "
0x0e 1_11_0 = -0b1.0*2^2   = -4.0
\n", "
\n", "
0x07 0_11_1 = +0b1.1*2^2   = 6.0
\n", "
\n", "
0x0f 1_11_1 = -0b1.1*2^2   = -6.0
\n", "
" ], "text/plain": [ "" ] }, "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": [ "\n", "

FP8 Value Table, ocp_e2m3

\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
0x00 0_00_000 = 0.0
\n", "
\n", "
0x20 1_00_000 = -0.0
\n", "
\n", "
0x01 0_00_001 = +0b0.001*2^0   = 0.125
\n", "
\n", "
0x21 1_00_001 = -0b0.001*2^0   = -0.125
\n", "
\n", "
0x02 0_00_010 = +0b0.010*2^0   = 0.25
\n", "
\n", "
0x22 1_00_010 = -0b0.010*2^0   = -0.25
\n", "
\n", "
0x03 0_00_011 = +0b0.011*2^0   = 0.375
\n", "
\n", "
0x23 1_00_011 = -0b0.011*2^0   = -0.375
\n", "
\n", "
0x04 0_00_100 = +0b0.100*2^0   = 0.5
\n", "
\n", "
0x24 1_00_100 = -0b0.100*2^0   = -0.5
\n", "
\n", "
0x05 0_00_101 = +0b0.101*2^0   = 0.625
\n", "
\n", "
0x25 1_00_101 = -0b0.101*2^0   = -0.625
\n", "
\n", "
0x06 0_00_110 = +0b0.110*2^0   = 0.75
\n", "
\n", "
0x26 1_00_110 = -0b0.110*2^0   = -0.75
\n", "
\n", "
0x07 0_00_111 = +0b0.111*2^0   = 0.875
\n", "
\n", "
0x27 1_00_111 = -0b0.111*2^0   = -0.875
\n", "
\n", "
0x08 0_01_000 = +0b1.000*2^0   = 1.0
\n", "
\n", "
0x28 1_01_000 = -0b1.000*2^0   = -1.0
\n", "
\n", "
0x09 0_01_001 = +0b1.001*2^0   = 1.125
\n", "
\n", "
0x29 1_01_001 = -0b1.001*2^0   = -1.125
\n", "
\n", "
0x0a 0_01_010 = +0b1.010*2^0   = 1.25
\n", "
\n", "
0x2a 1_01_010 = -0b1.010*2^0   = -1.25
\n", "
\n", "
0x0b 0_01_011 = +0b1.011*2^0   = 1.375
\n", "
\n", "
0x2b 1_01_011 = -0b1.011*2^0   = -1.375
\n", "
\n", "
0x0c 0_01_100 = +0b1.100*2^0   = 1.5
\n", "
\n", "
0x2c 1_01_100 = -0b1.100*2^0   = -1.5
\n", "
\n", "
0x0d 0_01_101 = +0b1.101*2^0   = 1.625
\n", "
\n", "
0x2d 1_01_101 = -0b1.101*2^0   = -1.625
\n", "
\n", "
0x0e 0_01_110 = +0b1.110*2^0   = 1.75
\n", "
\n", "
0x2e 1_01_110 = -0b1.110*2^0   = -1.75
\n", "
\n", "
0x0f 0_01_111 = +0b1.111*2^0   = 1.875
\n", "
\n", "
0x2f 1_01_111 = -0b1.111*2^0   = -1.875
\n", "
\n", "
0x10 0_10_000 = +0b1.000*2^1   = 2.0
\n", "
\n", "
0x30 1_10_000 = -0b1.000*2^1   = -2.0
\n", "
\n", "
0x11 0_10_001 = +0b1.001*2^1   = 2.25
\n", "
\n", "
0x31 1_10_001 = -0b1.001*2^1   = -2.25
\n", "
\n", "
0x12 0_10_010 = +0b1.010*2^1   = 2.5
\n", "
\n", "
0x32 1_10_010 = -0b1.010*2^1   = -2.5
\n", "
\n", "
0x13 0_10_011 = +0b1.011*2^1   = 2.75
\n", "
\n", "
0x33 1_10_011 = -0b1.011*2^1   = -2.75
\n", "
\n", "
0x14 0_10_100 = +0b1.100*2^1   = 3.0
\n", "
\n", "
0x34 1_10_100 = -0b1.100*2^1   = -3.0
\n", "
\n", "
0x15 0_10_101 = +0b1.101*2^1   = 3.25
\n", "
\n", "
0x35 1_10_101 = -0b1.101*2^1   = -3.25
\n", "
\n", "
0x16 0_10_110 = +0b1.110*2^1   = 3.5
\n", "
\n", "
0x36 1_10_110 = -0b1.110*2^1   = -3.5
\n", "
\n", "
0x17 0_10_111 = +0b1.111*2^1   = 3.75
\n", "
\n", "
0x37 1_10_111 = -0b1.111*2^1   = -3.75
\n", "
\n", "
0x18 0_11_000 = +0b1.000*2^2   = 4.0
\n", "
\n", "
0x38 1_11_000 = -0b1.000*2^2   = -4.0
\n", "
\n", "
0x19 0_11_001 = +0b1.001*2^2   = 4.5
\n", "
\n", "
0x39 1_11_001 = -0b1.001*2^2   = -4.5
\n", "
\n", "
0x1a 0_11_010 = +0b1.010*2^2   = 5.0
\n", "
\n", "
0x3a 1_11_010 = -0b1.010*2^2   = -5.0
\n", "
\n", "
0x1b 0_11_011 = +0b1.011*2^2   = 5.5
\n", "
\n", "
0x3b 1_11_011 = -0b1.011*2^2   = -5.5
\n", "
\n", "
0x1c 0_11_100 = +0b1.100*2^2   = 6.0
\n", "
\n", "
0x3c 1_11_100 = -0b1.100*2^2   = -6.0
\n", "
\n", "
0x1d 0_11_101 = +0b1.101*2^2   = 6.5
\n", "
\n", "
0x3d 1_11_101 = -0b1.101*2^2   = -6.5
\n", "
\n", "
0x1e 0_11_110 = +0b1.110*2^2   = 7.0
\n", "
\n", "
0x3e 1_11_110 = -0b1.110*2^2   = -7.0
\n", "
\n", "
0x1f 0_11_111 = +0b1.111*2^2   = 7.5
\n", "
\n", "
0x3f 1_11_111 = -0b1.111*2^2   = -7.5
\n", "
" ], "text/plain": [ "" ] }, "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": [ "### OCP Formats: E5M2, E4M3" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "

FP8 Value Table, ocp_e5m2

\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
0x00 0_00000_00 = 0.0
\n", "
\n", "
0x40 0_10000_00 = +0b1.00*2^1   = 2.0
\n", "
\n", "
0x80 1_00000_00 = -0.0
\n", "
\n", "
0xc0 1_10000_00 = -0b1.00*2^1   = -2.0
\n", "
\n", "
0x01 0_00000_01 = +0b0.01*2^-14 = ~1.5259e-05
\n", "
\n", "
0x41 0_10000_01 = +0b1.01*2^1   = 2.5
\n", "
\n", "
0x81 1_00000_01 = -0b0.01*2^-14 = ~-1.5259e-05
\n", "
\n", "
0xc1 1_10000_01 = -0b1.01*2^1   = -2.5
\n", "
\n", "
0x02 0_00000_10 = +0b0.10*2^-14 = ~3.0518e-05
\n", "
\n", "
0x42 0_10000_10 = +0b1.10*2^1   = 3.0
\n", "
\n", "
0x82 1_00000_10 = -0b0.10*2^-14 = ~-3.0518e-05
\n", "
\n", "
0xc2 1_10000_10 = -0b1.10*2^1   = -3.0
\n", "
\n", "
0x03 0_00000_11 = +0b0.11*2^-14 = ~4.5776e-05
\n", "
\n", "
0x43 0_10000_11 = +0b1.11*2^1   = 3.5
\n", "
\n", "
0x83 1_00000_11 = -0b0.11*2^-14 = ~-4.5776e-05
\n", "
\n", "
0xc3 1_10000_11 = -0b1.11*2^1   = -3.5
\n", "
\n", "
0x04 0_00001_00 = +0b1.00*2^-14 = ~6.1035e-05
\n", "
\n", "
0x44 0_10001_00 = +0b1.00*2^2   = 4.0
\n", "
\n", "
0x84 1_00001_00 = -0b1.00*2^-14 = ~-6.1035e-05
\n", "
\n", "
0xc4 1_10001_00 = -0b1.00*2^2   = -4.0
\n", "
\n", "
0x05 0_00001_01 = +0b1.01*2^-14 = ~7.6294e-05
\n", "
\n", "
0x45 0_10001_01 = +0b1.01*2^2   = 5.0
\n", "
\n", "
0x85 1_00001_01 = -0b1.01*2^-14 = ~-7.6294e-05
\n", "
\n", "
0xc5 1_10001_01 = -0b1.01*2^2   = -5.0
\n", "
\n", "
0x06 0_00001_10 = +0b1.10*2^-14 = ~9.1553e-05
\n", "
\n", "
0x46 0_10001_10 = +0b1.10*2^2   = 6.0
\n", "
\n", "
0x86 1_00001_10 = -0b1.10*2^-14 = ~-9.1553e-05
\n", "
\n", "
0xc6 1_10001_10 = -0b1.10*2^2   = -6.0
\n", "
\n", "
0x07 0_00001_11 = +0b1.11*2^-14 = ~0.00011
\n", "
\n", "
0x47 0_10001_11 = +0b1.11*2^2   = 7.0
\n", "
\n", "
0x87 1_00001_11 = -0b1.11*2^-14 = ~-0.00011
\n", "
\n", "
0xc7 1_10001_11 = -0b1.11*2^2   = -7.0
\n", "
\n", "
0x08 0_00010_00 = +0b1.00*2^-13 = ~0.00012
\n", "
\n", "
0x48 0_10010_00 = +0b1.00*2^3   = 8.0
\n", "
\n", "
0x88 1_00010_00 = -0b1.00*2^-13 = ~-0.00012
\n", "
\n", "
0xc8 1_10010_00 = -0b1.00*2^3   = -8.0
\n", "
\n", "
0x09 0_00010_01 = +0b1.01*2^-13 = ~0.00015
\n", "
\n", "
0x49 0_10010_01 = +0b1.01*2^3   = 10.0
\n", "
\n", "
0x89 1_00010_01 = -0b1.01*2^-13 = ~-0.00015
\n", "
\n", "
0xc9 1_10010_01 = -0b1.01*2^3   = -10.0
\n", "
\n", "
0x0a 0_00010_10 = +0b1.10*2^-13 = ~0.00018
\n", "
\n", "
0x4a 0_10010_10 = +0b1.10*2^3   = 12.0
\n", "
\n", "
0x8a 1_00010_10 = -0b1.10*2^-13 = ~-0.00018
\n", "
\n", "
0xca 1_10010_10 = -0b1.10*2^3   = -12.0
\n", "
\n", "
0x0b 0_00010_11 = +0b1.11*2^-13 = ~0.00021
\n", "
\n", "
0x4b 0_10010_11 = +0b1.11*2^3   = 14.0
\n", "
\n", "
0x8b 1_00010_11 = -0b1.11*2^-13 = ~-0.00021
\n", "
\n", "
0xcb 1_10010_11 = -0b1.11*2^3   = -14.0
\n", "
\n", "
0x0c 0_00011_00 = +0b1.00*2^-12 = ~0.00024
\n", "
\n", "
0x4c 0_10011_00 = +0b1.00*2^4   = 16.0
\n", "
\n", "
0x8c 1_00011_00 = -0b1.00*2^-12 = ~-0.00024
\n", "
\n", "
0xcc 1_10011_00 = -0b1.00*2^4   = -16.0
\n", "
\n", "
0x0d 0_00011_01 = +0b1.01*2^-12 = ~0.00031
\n", "
\n", "
0x4d 0_10011_01 = +0b1.01*2^4   = 20.0
\n", "
\n", "
0x8d 1_00011_01 = -0b1.01*2^-12 = ~-0.00031
\n", "
\n", "
0xcd 1_10011_01 = -0b1.01*2^4   = -20.0
\n", "
\n", "
0x0e 0_00011_10 = +0b1.10*2^-12 = ~0.00037
\n", "
\n", "
0x4e 0_10011_10 = +0b1.10*2^4   = 24.0
\n", "
\n", "
0x8e 1_00011_10 = -0b1.10*2^-12 = ~-0.00037
\n", "
\n", "
0xce 1_10011_10 = -0b1.10*2^4   = -24.0
\n", "
\n", "
0x0f 0_00011_11 = +0b1.11*2^-12 = ~0.00043
\n", "
\n", "
0x4f 0_10011_11 = +0b1.11*2^4   = 28.0
\n", "
\n", "
0x8f 1_00011_11 = -0b1.11*2^-12 = ~-0.00043
\n", "
\n", "
0xcf 1_10011_11 = -0b1.11*2^4   = -28.0
\n", "
\n", "
0x30 0_01100_00 = +0b1.00*2^-3  = 0.125
\n", "
\n", "
0x70 0_11100_00 = +0b1.00*2^13  = 8192.0
\n", "
\n", "
0xb0 1_01100_00 = -0b1.00*2^-3  = -0.125
\n", "
\n", "
0xf0 1_11100_00 = -0b1.00*2^13  = -8192.0
\n", "
\n", "
0x31 0_01100_01 = +0b1.01*2^-3  = 0.15625
\n", "
\n", "
0x71 0_11100_01 = +0b1.01*2^13  = 10240.0
\n", "
\n", "
0xb1 1_01100_01 = -0b1.01*2^-3  = -0.15625
\n", "
\n", "
0xf1 1_11100_01 = -0b1.01*2^13  = -10240.0
\n", "
\n", "
0x32 0_01100_10 = +0b1.10*2^-3  = 0.1875
\n", "
\n", "
0x72 0_11100_10 = +0b1.10*2^13  = 12288.0
\n", "
\n", "
0xb2 1_01100_10 = -0b1.10*2^-3  = -0.1875
\n", "
\n", "
0xf2 1_11100_10 = -0b1.10*2^13  = -12288.0
\n", "
\n", "
0x33 0_01100_11 = +0b1.11*2^-3  = 0.21875
\n", "
\n", "
0x73 0_11100_11 = +0b1.11*2^13  = 14336.0
\n", "
\n", "
0xb3 1_01100_11 = -0b1.11*2^-3  = -0.21875
\n", "
\n", "
0xf3 1_11100_11 = -0b1.11*2^13  = -14336.0
\n", "
\n", "
0x34 0_01101_00 = +0b1.00*2^-2  = 0.25
\n", "
\n", "
0x74 0_11101_00 = +0b1.00*2^14  = 16384.0
\n", "
\n", "
0xb4 1_01101_00 = -0b1.00*2^-2  = -0.25
\n", "
\n", "
0xf4 1_11101_00 = -0b1.00*2^14  = -16384.0
\n", "
\n", "
0x35 0_01101_01 = +0b1.01*2^-2  = 0.3125
\n", "
\n", "
0x75 0_11101_01 = +0b1.01*2^14  = 20480.0
\n", "
\n", "
0xb5 1_01101_01 = -0b1.01*2^-2  = -0.3125
\n", "
\n", "
0xf5 1_11101_01 = -0b1.01*2^14  = -20480.0
\n", "
\n", "
0x36 0_01101_10 = +0b1.10*2^-2  = 0.375
\n", "
\n", "
0x76 0_11101_10 = +0b1.10*2^14  = 24576.0
\n", "
\n", "
0xb6 1_01101_10 = -0b1.10*2^-2  = -0.375
\n", "
\n", "
0xf6 1_11101_10 = -0b1.10*2^14  = -24576.0
\n", "
\n", "
0x37 0_01101_11 = +0b1.11*2^-2  = 0.4375
\n", "
\n", "
0x77 0_11101_11 = +0b1.11*2^14  = 28672.0
\n", "
\n", "
0xb7 1_01101_11 = -0b1.11*2^-2  = -0.4375
\n", "
\n", "
0xf7 1_11101_11 = -0b1.11*2^14  = -28672.0
\n", "
\n", "
0x38 0_01110_00 = +0b1.00*2^-1  = 0.5
\n", "
\n", "
0x78 0_11110_00 = +0b1.00*2^15  = 32768.0
\n", "
\n", "
0xb8 1_01110_00 = -0b1.00*2^-1  = -0.5
\n", "
\n", "
0xf8 1_11110_00 = -0b1.00*2^15  = -32768.0
\n", "
\n", "
0x39 0_01110_01 = +0b1.01*2^-1  = 0.625
\n", "
\n", "
0x79 0_11110_01 = +0b1.01*2^15  = 40960.0
\n", "
\n", "
0xb9 1_01110_01 = -0b1.01*2^-1  = -0.625
\n", "
\n", "
0xf9 1_11110_01 = -0b1.01*2^15  = -40960.0
\n", "
\n", "
0x3a 0_01110_10 = +0b1.10*2^-1  = 0.75
\n", "
\n", "
0x7a 0_11110_10 = +0b1.10*2^15  = 49152.0
\n", "
\n", "
0xba 1_01110_10 = -0b1.10*2^-1  = -0.75
\n", "
\n", "
0xfa 1_11110_10 = -0b1.10*2^15  = -49152.0
\n", "
\n", "
0x3b 0_01110_11 = +0b1.11*2^-1  = 0.875
\n", "
\n", "
0x7b 0_11110_11 = +0b1.11*2^15  = 57344.0
\n", "
\n", "
0xbb 1_01110_11 = -0b1.11*2^-1  = -0.875
\n", "
\n", "
0xfb 1_11110_11 = -0b1.11*2^15  = -57344.0
\n", "
\n", "
0x3c 0_01111_00 = +0b1.00*2^0   = 1.0
\n", "
\n", "
0x7c 0_11111_00 = inf
\n", "
\n", "
0xbc 1_01111_00 = -0b1.00*2^0   = -1.0
\n", "
\n", "
0xfc 1_11111_00 = -inf
\n", "
\n", "
0x3d 0_01111_01 = +0b1.01*2^0   = 1.25
\n", "
\n", "
0x7d 0_11111_01 = nan
\n", "
\n", "
0xbd 1_01111_01 = -0b1.01*2^0   = -1.25
\n", "
\n", "
0xfd 1_11111_01 = nan
\n", "
\n", "
0x3e 0_01111_10 = +0b1.10*2^0   = 1.5
\n", "
\n", "
0x7e 0_11111_10 = nan
\n", "
\n", "
0xbe 1_01111_10 = -0b1.10*2^0   = -1.5
\n", "
\n", "
0xfe 1_11111_10 = nan
\n", "
\n", "
0x3f 0_01111_11 = +0b1.11*2^0   = 1.75
\n", "
\n", "
0x7f 0_11111_11 = nan
\n", "
\n", "
0xbf 1_01111_11 = -0b1.11*2^0   = -1.75
\n", "
\n", "
0xff 1_11111_11 = nan
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 7, "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": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "

FP8 Value Table, ocp_e4m3

\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
0x00 0_0000_000 = 0.0
\n", "
\n", "
0x40 0_1000_000 = +0b1.000*2^1   = 2.0
\n", "
\n", "
0x80 1_0000_000 = -0.0
\n", "
\n", "
0xc0 1_1000_000 = -0b1.000*2^1   = -2.0
\n", "
\n", "
0x01 0_0000_001 = +0b0.001*2^-6  = ~0.00195
\n", "
\n", "
0x41 0_1000_001 = +0b1.001*2^1   = 2.25
\n", "
\n", "
0x81 1_0000_001 = -0b0.001*2^-6  = ~-0.00195
\n", "
\n", "
0xc1 1_1000_001 = -0b1.001*2^1   = -2.25
\n", "
\n", "
0x02 0_0000_010 = +0b0.010*2^-6  = ~0.00391
\n", "
\n", "
0x42 0_1000_010 = +0b1.010*2^1   = 2.5
\n", "
\n", "
0x82 1_0000_010 = -0b0.010*2^-6  = ~-0.00391
\n", "
\n", "
0xc2 1_1000_010 = -0b1.010*2^1   = -2.5
\n", "
\n", "
0x03 0_0000_011 = +0b0.011*2^-6  = ~0.00586
\n", "
\n", "
0x43 0_1000_011 = +0b1.011*2^1   = 2.75
\n", "
\n", "
0x83 1_0000_011 = -0b0.011*2^-6  = ~-0.00586
\n", "
\n", "
0xc3 1_1000_011 = -0b1.011*2^1   = -2.75
\n", "
\n", "
0x04 0_0000_100 = +0b0.100*2^-6  = ~0.00781
\n", "
\n", "
0x44 0_1000_100 = +0b1.100*2^1   = 3.0
\n", "
\n", "
0x84 1_0000_100 = -0b0.100*2^-6  = ~-0.00781
\n", "
\n", "
0xc4 1_1000_100 = -0b1.100*2^1   = -3.0
\n", "
\n", "
0x05 0_0000_101 = +0b0.101*2^-6  = ~0.00977
\n", "
\n", "
0x45 0_1000_101 = +0b1.101*2^1   = 3.25
\n", "
\n", "
0x85 1_0000_101 = -0b0.101*2^-6  = ~-0.00977
\n", "
\n", "
0xc5 1_1000_101 = -0b1.101*2^1   = -3.25
\n", "
\n", "
0x06 0_0000_110 = +0b0.110*2^-6  = ~0.01172
\n", "
\n", "
0x46 0_1000_110 = +0b1.110*2^1   = 3.5
\n", "
\n", "
0x86 1_0000_110 = -0b0.110*2^-6  = ~-0.01172
\n", "
\n", "
0xc6 1_1000_110 = -0b1.110*2^1   = -3.5
\n", "
\n", "
0x07 0_0000_111 = +0b0.111*2^-6  = ~0.01367
\n", "
\n", "
0x47 0_1000_111 = +0b1.111*2^1   = 3.75
\n", "
\n", "
0x87 1_0000_111 = -0b0.111*2^-6  = ~-0.01367
\n", "
\n", "
0xc7 1_1000_111 = -0b1.111*2^1   = -3.75
\n", "
\n", "
0x08 0_0001_000 = +0b1.000*2^-6  = 0.015625
\n", "
\n", "
0x48 0_1001_000 = +0b1.000*2^2   = 4.0
\n", "
\n", "
0x88 1_0001_000 = -0b1.000*2^-6  = ~-0.01562
\n", "
\n", "
0xc8 1_1001_000 = -0b1.000*2^2   = -4.0
\n", "
\n", "
0x09 0_0001_001 = +0b1.001*2^-6  = ~0.01758
\n", "
\n", "
0x49 0_1001_001 = +0b1.001*2^2   = 4.5
\n", "
\n", "
0x89 1_0001_001 = -0b1.001*2^-6  = ~-0.01758
\n", "
\n", "
0xc9 1_1001_001 = -0b1.001*2^2   = -4.5
\n", "
\n", "
0x0a 0_0001_010 = +0b1.010*2^-6  = ~0.01953
\n", "
\n", "
0x4a 0_1001_010 = +0b1.010*2^2   = 5.0
\n", "
\n", "
0x8a 1_0001_010 = -0b1.010*2^-6  = ~-0.01953
\n", "
\n", "
0xca 1_1001_010 = -0b1.010*2^2   = -5.0
\n", "
\n", "
0x0b 0_0001_011 = +0b1.011*2^-6  = ~0.02148
\n", "
\n", "
0x4b 0_1001_011 = +0b1.011*2^2   = 5.5
\n", "
\n", "
0x8b 1_0001_011 = -0b1.011*2^-6  = ~-0.02148
\n", "
\n", "
0xcb 1_1001_011 = -0b1.011*2^2   = -5.5
\n", "
\n", "
0x0c 0_0001_100 = +0b1.100*2^-6  = ~0.02344
\n", "
\n", "
0x4c 0_1001_100 = +0b1.100*2^2   = 6.0
\n", "
\n", "
0x8c 1_0001_100 = -0b1.100*2^-6  = ~-0.02344
\n", "
\n", "
0xcc 1_1001_100 = -0b1.100*2^2   = -6.0
\n", "
\n", "
0x0d 0_0001_101 = +0b1.101*2^-6  = ~0.02539
\n", "
\n", "
0x4d 0_1001_101 = +0b1.101*2^2   = 6.5
\n", "
\n", "
0x8d 1_0001_101 = -0b1.101*2^-6  = ~-0.02539
\n", "
\n", "
0xcd 1_1001_101 = -0b1.101*2^2   = -6.5
\n", "
\n", "
0x0e 0_0001_110 = +0b1.110*2^-6  = ~0.02734
\n", "
\n", "
0x4e 0_1001_110 = +0b1.110*2^2   = 7.0
\n", "
\n", "
0x8e 1_0001_110 = -0b1.110*2^-6  = ~-0.02734
\n", "
\n", "
0xce 1_1001_110 = -0b1.110*2^2   = -7.0
\n", "
\n", "
0x0f 0_0001_111 = +0b1.111*2^-6  = ~0.02930
\n", "
\n", "
0x4f 0_1001_111 = +0b1.111*2^2   = 7.5
\n", "
\n", "
0x8f 1_0001_111 = -0b1.111*2^-6  = ~-0.02930
\n", "
\n", "
0xcf 1_1001_111 = -0b1.111*2^2   = -7.5
\n", "
\n", "
0x30 0_0110_000 = +0b1.000*2^-1  = 0.5
\n", "
\n", "
0x70 0_1110_000 = +0b1.000*2^7   = 128.0
\n", "
\n", "
0xb0 1_0110_000 = -0b1.000*2^-1  = -0.5
\n", "
\n", "
0xf0 1_1110_000 = -0b1.000*2^7   = -128.0
\n", "
\n", "
0x31 0_0110_001 = +0b1.001*2^-1  = 0.5625
\n", "
\n", "
0x71 0_1110_001 = +0b1.001*2^7   = 144.0
\n", "
\n", "
0xb1 1_0110_001 = -0b1.001*2^-1  = -0.5625
\n", "
\n", "
0xf1 1_1110_001 = -0b1.001*2^7   = -144.0
\n", "
\n", "
0x32 0_0110_010 = +0b1.010*2^-1  = 0.625
\n", "
\n", "
0x72 0_1110_010 = +0b1.010*2^7   = 160.0
\n", "
\n", "
0xb2 1_0110_010 = -0b1.010*2^-1  = -0.625
\n", "
\n", "
0xf2 1_1110_010 = -0b1.010*2^7   = -160.0
\n", "
\n", "
0x33 0_0110_011 = +0b1.011*2^-1  = 0.6875
\n", "
\n", "
0x73 0_1110_011 = +0b1.011*2^7   = 176.0
\n", "
\n", "
0xb3 1_0110_011 = -0b1.011*2^-1  = -0.6875
\n", "
\n", "
0xf3 1_1110_011 = -0b1.011*2^7   = -176.0
\n", "
\n", "
0x34 0_0110_100 = +0b1.100*2^-1  = 0.75
\n", "
\n", "
0x74 0_1110_100 = +0b1.100*2^7   = 192.0
\n", "
\n", "
0xb4 1_0110_100 = -0b1.100*2^-1  = -0.75
\n", "
\n", "
0xf4 1_1110_100 = -0b1.100*2^7   = -192.0
\n", "
\n", "
0x35 0_0110_101 = +0b1.101*2^-1  = 0.8125
\n", "
\n", "
0x75 0_1110_101 = +0b1.101*2^7   = 208.0
\n", "
\n", "
0xb5 1_0110_101 = -0b1.101*2^-1  = -0.8125
\n", "
\n", "
0xf5 1_1110_101 = -0b1.101*2^7   = -208.0
\n", "
\n", "
0x36 0_0110_110 = +0b1.110*2^-1  = 0.875
\n", "
\n", "
0x76 0_1110_110 = +0b1.110*2^7   = 224.0
\n", "
\n", "
0xb6 1_0110_110 = -0b1.110*2^-1  = -0.875
\n", "
\n", "
0xf6 1_1110_110 = -0b1.110*2^7   = -224.0
\n", "
\n", "
0x37 0_0110_111 = +0b1.111*2^-1  = 0.9375
\n", "
\n", "
0x77 0_1110_111 = +0b1.111*2^7   = 240.0
\n", "
\n", "
0xb7 1_0110_111 = -0b1.111*2^-1  = -0.9375
\n", "
\n", "
0xf7 1_1110_111 = -0b1.111*2^7   = -240.0
\n", "
\n", "
0x38 0_0111_000 = +0b1.000*2^0   = 1.0
\n", "
\n", "
0x78 0_1111_000 = +0b1.000*2^8   = 256.0
\n", "
\n", "
0xb8 1_0111_000 = -0b1.000*2^0   = -1.0
\n", "
\n", "
0xf8 1_1111_000 = -0b1.000*2^8   = -256.0
\n", "
\n", "
0x39 0_0111_001 = +0b1.001*2^0   = 1.125
\n", "
\n", "
0x79 0_1111_001 = +0b1.001*2^8   = 288.0
\n", "
\n", "
0xb9 1_0111_001 = -0b1.001*2^0   = -1.125
\n", "
\n", "
0xf9 1_1111_001 = -0b1.001*2^8   = -288.0
\n", "
\n", "
0x3a 0_0111_010 = +0b1.010*2^0   = 1.25
\n", "
\n", "
0x7a 0_1111_010 = +0b1.010*2^8   = 320.0
\n", "
\n", "
0xba 1_0111_010 = -0b1.010*2^0   = -1.25
\n", "
\n", "
0xfa 1_1111_010 = -0b1.010*2^8   = -320.0
\n", "
\n", "
0x3b 0_0111_011 = +0b1.011*2^0   = 1.375
\n", "
\n", "
0x7b 0_1111_011 = +0b1.011*2^8   = 352.0
\n", "
\n", "
0xbb 1_0111_011 = -0b1.011*2^0   = -1.375
\n", "
\n", "
0xfb 1_1111_011 = -0b1.011*2^8   = -352.0
\n", "
\n", "
0x3c 0_0111_100 = +0b1.100*2^0   = 1.5
\n", "
\n", "
0x7c 0_1111_100 = +0b1.100*2^8   = 384.0
\n", "
\n", "
0xbc 1_0111_100 = -0b1.100*2^0   = -1.5
\n", "
\n", "
0xfc 1_1111_100 = -0b1.100*2^8   = -384.0
\n", "
\n", "
0x3d 0_0111_101 = +0b1.101*2^0   = 1.625
\n", "
\n", "
0x7d 0_1111_101 = +0b1.101*2^8   = 416.0
\n", "
\n", "
0xbd 1_0111_101 = -0b1.101*2^0   = -1.625
\n", "
\n", "
0xfd 1_1111_101 = -0b1.101*2^8   = -416.0
\n", "
\n", "
0x3e 0_0111_110 = +0b1.110*2^0   = 1.75
\n", "
\n", "
0x7e 0_1111_110 = +0b1.110*2^8   = 448.0
\n", "
\n", "
0xbe 1_0111_110 = -0b1.110*2^0   = -1.75
\n", "
\n", "
0xfe 1_1111_110 = -0b1.110*2^8   = -448.0
\n", "
\n", "
0x3f 0_0111_111 = +0b1.111*2^0   = 1.875
\n", "
\n", "
0x7f 0_1111_111 = nan
\n", "
\n", "
0xbf 1_0111_111 = -0b1.111*2^0   = -1.875
\n", "
\n", "
0xff 1_1111_111 = nan
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 8, "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": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "

FP8 Value Table, p3109_p3

\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
0x00 0_00000_00 = 0.0
\n", "
\n", "
0x40 0_10000_00 = +0b1.00*2^0   = 1.0
\n", "
\n", "
0x80 1_00000_00 = nan
\n", "
\n", "
0xc0 1_10000_00 = -0b1.00*2^0   = -1.0
\n", "
\n", "
0x01 0_00000_01 = +0b0.01*2^-15 = ~7.6294e-06
\n", "
\n", "
0x41 0_10000_01 = +0b1.01*2^0   = 1.25
\n", "
\n", "
0x81 1_00000_01 = -0b0.01*2^-15 = ~-7.6294e-06
\n", "
\n", "
0xc1 1_10000_01 = -0b1.01*2^0   = -1.25
\n", "
\n", "
0x02 0_00000_10 = +0b0.10*2^-15 = ~1.5259e-05
\n", "
\n", "
0x42 0_10000_10 = +0b1.10*2^0   = 1.5
\n", "
\n", "
0x82 1_00000_10 = -0b0.10*2^-15 = ~-1.5259e-05
\n", "
\n", "
0xc2 1_10000_10 = -0b1.10*2^0   = -1.5
\n", "
\n", "
0x03 0_00000_11 = +0b0.11*2^-15 = ~2.2888e-05
\n", "
\n", "
0x43 0_10000_11 = +0b1.11*2^0   = 1.75
\n", "
\n", "
0x83 1_00000_11 = -0b0.11*2^-15 = ~-2.2888e-05
\n", "
\n", "
0xc3 1_10000_11 = -0b1.11*2^0   = -1.75
\n", "
\n", "
0x04 0_00001_00 = +0b1.00*2^-15 = ~3.0518e-05
\n", "
\n", "
0x44 0_10001_00 = +0b1.00*2^1   = 2.0
\n", "
\n", "
0x84 1_00001_00 = -0b1.00*2^-15 = ~-3.0518e-05
\n", "
\n", "
0xc4 1_10001_00 = -0b1.00*2^1   = -2.0
\n", "
\n", "
0x05 0_00001_01 = +0b1.01*2^-15 = ~3.8147e-05
\n", "
\n", "
0x45 0_10001_01 = +0b1.01*2^1   = 2.5
\n", "
\n", "
0x85 1_00001_01 = -0b1.01*2^-15 = ~-3.8147e-05
\n", "
\n", "
0xc5 1_10001_01 = -0b1.01*2^1   = -2.5
\n", "
\n", "
0x06 0_00001_10 = +0b1.10*2^-15 = ~4.5776e-05
\n", "
\n", "
0x46 0_10001_10 = +0b1.10*2^1   = 3.0
\n", "
\n", "
0x86 1_00001_10 = -0b1.10*2^-15 = ~-4.5776e-05
\n", "
\n", "
0xc6 1_10001_10 = -0b1.10*2^1   = -3.0
\n", "
\n", "
0x07 0_00001_11 = +0b1.11*2^-15 = ~5.3406e-05
\n", "
\n", "
0x47 0_10001_11 = +0b1.11*2^1   = 3.5
\n", "
\n", "
0x87 1_00001_11 = -0b1.11*2^-15 = ~-5.3406e-05
\n", "
\n", "
0xc7 1_10001_11 = -0b1.11*2^1   = -3.5
\n", "
\n", "
0x08 0_00010_00 = +0b1.00*2^-14 = ~6.1035e-05
\n", "
\n", "
0x48 0_10010_00 = +0b1.00*2^2   = 4.0
\n", "
\n", "
0x88 1_00010_00 = -0b1.00*2^-14 = ~-6.1035e-05
\n", "
\n", "
0xc8 1_10010_00 = -0b1.00*2^2   = -4.0
\n", "
\n", "
0x09 0_00010_01 = +0b1.01*2^-14 = ~7.6294e-05
\n", "
\n", "
0x49 0_10010_01 = +0b1.01*2^2   = 5.0
\n", "
\n", "
0x89 1_00010_01 = -0b1.01*2^-14 = ~-7.6294e-05
\n", "
\n", "
0xc9 1_10010_01 = -0b1.01*2^2   = -5.0
\n", "
\n", "
0x0a 0_00010_10 = +0b1.10*2^-14 = ~9.1553e-05
\n", "
\n", "
0x4a 0_10010_10 = +0b1.10*2^2   = 6.0
\n", "
\n", "
0x8a 1_00010_10 = -0b1.10*2^-14 = ~-9.1553e-05
\n", "
\n", "
0xca 1_10010_10 = -0b1.10*2^2   = -6.0
\n", "
\n", "
0x0b 0_00010_11 = +0b1.11*2^-14 = ~0.00011
\n", "
\n", "
0x4b 0_10010_11 = +0b1.11*2^2   = 7.0
\n", "
\n", "
0x8b 1_00010_11 = -0b1.11*2^-14 = ~-0.00011
\n", "
\n", "
0xcb 1_10010_11 = -0b1.11*2^2   = -7.0
\n", "
\n", "
0x0c 0_00011_00 = +0b1.00*2^-13 = ~0.00012
\n", "
\n", "
0x4c 0_10011_00 = +0b1.00*2^3   = 8.0
\n", "
\n", "
0x8c 1_00011_00 = -0b1.00*2^-13 = ~-0.00012
\n", "
\n", "
0xcc 1_10011_00 = -0b1.00*2^3   = -8.0
\n", "
\n", "
0x0d 0_00011_01 = +0b1.01*2^-13 = ~0.00015
\n", "
\n", "
0x4d 0_10011_01 = +0b1.01*2^3   = 10.0
\n", "
\n", "
0x8d 1_00011_01 = -0b1.01*2^-13 = ~-0.00015
\n", "
\n", "
0xcd 1_10011_01 = -0b1.01*2^3   = -10.0
\n", "
\n", "
0x0e 0_00011_10 = +0b1.10*2^-13 = ~0.00018
\n", "
\n", "
0x4e 0_10011_10 = +0b1.10*2^3   = 12.0
\n", "
\n", "
0x8e 1_00011_10 = -0b1.10*2^-13 = ~-0.00018
\n", "
\n", "
0xce 1_10011_10 = -0b1.10*2^3   = -12.0
\n", "
\n", "
0x0f 0_00011_11 = +0b1.11*2^-13 = ~0.00021
\n", "
\n", "
0x4f 0_10011_11 = +0b1.11*2^3   = 14.0
\n", "
\n", "
0x8f 1_00011_11 = -0b1.11*2^-13 = ~-0.00021
\n", "
\n", "
0xcf 1_10011_11 = -0b1.11*2^3   = -14.0
\n", "
\n", "
0x30 0_01100_00 = +0b1.00*2^-4  = 0.0625
\n", "
\n", "
0x70 0_11100_00 = +0b1.00*2^12  = 4096.0
\n", "
\n", "
0xb0 1_01100_00 = -0b1.00*2^-4  = -0.0625
\n", "
\n", "
0xf0 1_11100_00 = -0b1.00*2^12  = -4096.0
\n", "
\n", "
0x31 0_01100_01 = +0b1.01*2^-4  = 0.078125
\n", "
\n", "
0x71 0_11100_01 = +0b1.01*2^12  = 5120.0
\n", "
\n", "
0xb1 1_01100_01 = -0b1.01*2^-4  = ~-0.07812
\n", "
\n", "
0xf1 1_11100_01 = -0b1.01*2^12  = -5120.0
\n", "
\n", "
0x32 0_01100_10 = +0b1.10*2^-4  = 0.09375
\n", "
\n", "
0x72 0_11100_10 = +0b1.10*2^12  = 6144.0
\n", "
\n", "
0xb2 1_01100_10 = -0b1.10*2^-4  = -0.09375
\n", "
\n", "
0xf2 1_11100_10 = -0b1.10*2^12  = -6144.0
\n", "
\n", "
0x33 0_01100_11 = +0b1.11*2^-4  = 0.109375
\n", "
\n", "
0x73 0_11100_11 = +0b1.11*2^12  = 7168.0
\n", "
\n", "
0xb3 1_01100_11 = -0b1.11*2^-4  = ~-0.10938
\n", "
\n", "
0xf3 1_11100_11 = -0b1.11*2^12  = -7168.0
\n", "
\n", "
0x34 0_01101_00 = +0b1.00*2^-3  = 0.125
\n", "
\n", "
0x74 0_11101_00 = +0b1.00*2^13  = 8192.0
\n", "
\n", "
0xb4 1_01101_00 = -0b1.00*2^-3  = -0.125
\n", "
\n", "
0xf4 1_11101_00 = -0b1.00*2^13  = -8192.0
\n", "
\n", "
0x35 0_01101_01 = +0b1.01*2^-3  = 0.15625
\n", "
\n", "
0x75 0_11101_01 = +0b1.01*2^13  = 10240.0
\n", "
\n", "
0xb5 1_01101_01 = -0b1.01*2^-3  = -0.15625
\n", "
\n", "
0xf5 1_11101_01 = -0b1.01*2^13  = -10240.0
\n", "
\n", "
0x36 0_01101_10 = +0b1.10*2^-3  = 0.1875
\n", "
\n", "
0x76 0_11101_10 = +0b1.10*2^13  = 12288.0
\n", "
\n", "
0xb6 1_01101_10 = -0b1.10*2^-3  = -0.1875
\n", "
\n", "
0xf6 1_11101_10 = -0b1.10*2^13  = -12288.0
\n", "
\n", "
0x37 0_01101_11 = +0b1.11*2^-3  = 0.21875
\n", "
\n", "
0x77 0_11101_11 = +0b1.11*2^13  = 14336.0
\n", "
\n", "
0xb7 1_01101_11 = -0b1.11*2^-3  = -0.21875
\n", "
\n", "
0xf7 1_11101_11 = -0b1.11*2^13  = -14336.0
\n", "
\n", "
0x38 0_01110_00 = +0b1.00*2^-2  = 0.25
\n", "
\n", "
0x78 0_11110_00 = +0b1.00*2^14  = 16384.0
\n", "
\n", "
0xb8 1_01110_00 = -0b1.00*2^-2  = -0.25
\n", "
\n", "
0xf8 1_11110_00 = -0b1.00*2^14  = -16384.0
\n", "
\n", "
0x39 0_01110_01 = +0b1.01*2^-2  = 0.3125
\n", "
\n", "
0x79 0_11110_01 = +0b1.01*2^14  = 20480.0
\n", "
\n", "
0xb9 1_01110_01 = -0b1.01*2^-2  = -0.3125
\n", "
\n", "
0xf9 1_11110_01 = -0b1.01*2^14  = -20480.0
\n", "
\n", "
0x3a 0_01110_10 = +0b1.10*2^-2  = 0.375
\n", "
\n", "
0x7a 0_11110_10 = +0b1.10*2^14  = 24576.0
\n", "
\n", "
0xba 1_01110_10 = -0b1.10*2^-2  = -0.375
\n", "
\n", "
0xfa 1_11110_10 = -0b1.10*2^14  = -24576.0
\n", "
\n", "
0x3b 0_01110_11 = +0b1.11*2^-2  = 0.4375
\n", "
\n", "
0x7b 0_11110_11 = +0b1.11*2^14  = 28672.0
\n", "
\n", "
0xbb 1_01110_11 = -0b1.11*2^-2  = -0.4375
\n", "
\n", "
0xfb 1_11110_11 = -0b1.11*2^14  = -28672.0
\n", "
\n", "
0x3c 0_01111_00 = +0b1.00*2^-1  = 0.5
\n", "
\n", "
0x7c 0_11111_00 = +0b1.00*2^15  = 32768.0
\n", "
\n", "
0xbc 1_01111_00 = -0b1.00*2^-1  = -0.5
\n", "
\n", "
0xfc 1_11111_00 = -0b1.00*2^15  = -32768.0
\n", "
\n", "
0x3d 0_01111_01 = +0b1.01*2^-1  = 0.625
\n", "
\n", "
0x7d 0_11111_01 = +0b1.01*2^15  = 40960.0
\n", "
\n", "
0xbd 1_01111_01 = -0b1.01*2^-1  = -0.625
\n", "
\n", "
0xfd 1_11111_01 = -0b1.01*2^15  = -40960.0
\n", "
\n", "
0x3e 0_01111_10 = +0b1.10*2^-1  = 0.75
\n", "
\n", "
0x7e 0_11111_10 = +0b1.10*2^15  = 49152.0
\n", "
\n", "
0xbe 1_01111_10 = -0b1.10*2^-1  = -0.75
\n", "
\n", "
0xfe 1_11111_10 = -0b1.10*2^15  = -49152.0
\n", "
\n", "
0x3f 0_01111_11 = +0b1.11*2^-1  = 0.875
\n", "
\n", "
0x7f 0_11111_11 = inf
\n", "
\n", "
0xbf 1_01111_11 = -0b1.11*2^-1  = -0.875
\n", "
\n", "
0xff 1_11111_11 = -inf
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HTML(mktbl(format_info_p3109(3), 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 }