{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0x78\n",
      "01111000\n"
     ]
    }
   ],
   "source": [
    "# Requires floatx lib from exams installed \n",
    "from floatX import IEEEHelper\n",
    "from floatX import float2hexr\n",
    "\n",
    "val = float(\"inf\")\n",
    "e = 4\n",
    "m = 3\n",
    "x = float2hexr(val,e,m)\n",
    "hex_width = (e+m+1)//4 if (e+m+1)%4 == 0 else ((e+m+1)//4)+1\n",
    "ans = \"{0:#0{1}x}\".format(x,hex_width)\n",
    "print(ans)\n",
    "ans = \"{0:0{1}b}\".format(x,e+m+1)\n",
    "print(ans)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "#bits 8\n",
      "Bias 7\n",
      "Emin -6\n",
      "Emax 7\n",
      "Mmin 0.125\n",
      "240.0\n"
     ]
    }
   ],
   "source": [
    "bit8 = IEEEHelper(4,3)\n",
    "print(\"#bits\",bit8.getbits())\n",
    "print(\"Bias\",bit8.getBias())\n",
    "print(\"Emin\",bit8.getEmin())\n",
    "print(\"Emax\",bit8.getEmax())\n",
    "print(\"Mmin\",bit8.getMmin())\n",
    "print(bit8.maxValue())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "  # .def(\"getbits\", &IEEEHelper::getbits)\n",
    "        # .def(\"getEmax\", &IEEEHelper::getEmax)\n",
    "        # .def(\"getEmin\", &IEEEHelper::getEmin)\n",
    "        # .def(\"getBias\", &IEEEHelper::getBias)\n",
    "        # .def(\"getMmin\", &IEEEHelper::getMmin)             // pow(2.0, -_m)\n",
    "        # .def(\"getMmaxNormal\", &IEEEHelper::getMmaxNormal) // 2 - pow(2.0, -_m)\n",
    "        # .def(\"getMmaxSubnormal\",\n",
    "        #      &IEEEHelper::getMmaxSubnormal) // return 1 - pow(2.0, -_m);\n",
    "        # .def(\"maxValue\",\n",
    "        #      &IEEEHelper::maxValue) // pow(2.0, getEmax()) * getMmaxNormal()\n",
    "        # .def(\"smallestNormalValue\",\n",
    "        #      &IEEEHelper::smallestNormalValue) // pow(2.0, getEmin())\n",
    "        # .def(\"maxSubnormalValue\",\n",
    "        #      &IEEEHelper::maxSubnormalValue) // pow(2.0, getEmin()) *\n",
    "        #                                      // getMmaxSubnormal();\n",
    "        # .def(\"minSubnormalValue\",\n",
    "        #      &IEEEHelper::minSubnormalValue) // pow(2.0, getEmin()) * getMmin();\n",
    "        # .def(\"countNormalRange\",\n",
    "        #      &IEEEHelper::countNormalRange) // (getEmax() - getEmin() + 1) *\n",
    "        #                                     // pow(2.0, _m)\n",
    "        # .def(\"countExpRange\",\n",
    "        #      &IEEEHelper::countExpRange) // (getEmax() - getEmin() + 1);\n",
    "        # .def(\"countSubnormalRange\",\n",
    "        #      &IEEEHelper::countSubnormalRange); // pow(2.0, _m)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "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.12.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
