From cabc198cfd23bbcfd02ad9fb17e3230d011890e2 Mon Sep 17 00:00:00 2001 From: pipme Date: Thu, 26 Sep 2024 19:49:28 +0300 Subject: [PATCH] Update. --- _quarto.yml | 2 +- blog+gist.qmd | 2 +- gist.qmd | 2 +- index.qmd | 2 +- posts/2024-09-26-Float64/index-gist.ipynb | 159 ++++++++++++++++++++++ 5 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 posts/2024-09-26-Float64/index-gist.ipynb diff --git a/_quarto.yml b/_quarto.yml index 0f4d26f..c046091 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -60,5 +60,5 @@ format: html: theme: light: cosmo - dark: darkly + dark: darkly # https://github.com/quarto-dev/quarto-cli/issues/6741 css: styles.css diff --git a/blog+gist.qmd b/blog+gist.qmd index 4fac515..8c482f8 100644 --- a/blog+gist.qmd +++ b/blog+gist.qmd @@ -1,7 +1,7 @@ --- title: "All blogs and gists." listing: - contents: "posts/**/*.qmd" + contents: ["posts/**/*.qmd", "posts/**/*.ipynb"] sort: "date desc" fields: [date, title, reading-time] type: table diff --git a/gist.qmd b/gist.qmd index 4761934..7de9b10 100644 --- a/gist.qmd +++ b/gist.qmd @@ -1,7 +1,7 @@ --- title: "Gist collection." listing: - contents: "posts/**/*gist.qmd" + contents: ["posts/**/*gist.qmd", "posts/**/*gist.ipynb"] sort: "date desc" fields: [date, title, reading-time] type: table diff --git a/index.qmd b/index.qmd index db1d019..fe6ae8c 100644 --- a/index.qmd +++ b/index.qmd @@ -1,7 +1,7 @@ --- title: "Blogs" listing: - contents: posts/**/*[!gist].qmd + contents: ["posts/**/*[!gist].qmd", "posts/**/*[!gist].ipynb"] sort: "date desc" type: default categories: true diff --git a/posts/2024-09-26-Float64/index-gist.ipynb b/posts/2024-09-26-Float64/index-gist.ipynb new file mode 100644 index 0000000..2aa6cfa --- /dev/null +++ b/posts/2024-09-26-Float64/index-gist.ipynb @@ -0,0 +1,159 @@ +{ + "cells": [ + { + "cell_type": "raw", + "id": "6ef206bd", + "metadata": { + "vscode": { + "languageId": "raw" + } + }, + "source": [ + "---\n", + "title: \"`exp(x)` overflow/underflow in Numpy (float64)\"\n", + "date: \"2024-09-26\"\n", + "date-modified: last-modified\n", + "categories: [Numpy, Python]\n", + "format:\n", + " html: default\n", + "execute: \n", + " enabled: true\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "65950641", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Numpy float info: Machine parameters for float64\n", + "---------------------------------------------------------------\n", + "precision = 15 resolution = 1.0000000000000001e-15\n", + "machep = -52 eps = 2.2204460492503131e-16\n", + "negep = -53 epsneg = 1.1102230246251565e-16\n", + "minexp = -1022 tiny = 2.2250738585072014e-308\n", + "maxexp = 1024 max = 1.7976931348623157e+308\n", + "nexp = 11 min = -max\n", + "smallest_normal = 2.2250738585072014e-308 smallest_subnormal = 4.9406564584124654e-324\n", + "---------------------------------------------------------------\n", + "\n" + ] + } + ], + "source": [ + "# | code-fold: true\n", + "import numpy as np\n", + "\n", + "np.seterr(all=\"ignore\")\n", + "print(\"Numpy float info:\", np.finfo(float))" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a2453c9d", + "metadata": {}, + "outputs": [], + "source": [ + "# | code-fold: true\n", + "\n", + "# Binary search: find the minimal integer x such that np.exp(x) is not zero\n", + "def find_minimal_exp_x():\n", + " left = -10000\n", + " right = 0\n", + " while right - left > 1:\n", + " mid = (left + right) // 2\n", + " if np.exp(mid) == 0:\n", + " left = mid\n", + " else:\n", + " right = mid\n", + " return right\n", + "\n", + "\n", + "min_int = find_minimal_exp_x()\n", + "\n", + "\n", + "# Binary search: find the maximal integer x such that np.exp(x) is not infinity\n", + "def find_maximal_exp_x():\n", + " left = 0\n", + " right = 10000\n", + " while right - left > 1:\n", + " mid = (left + right) // 2\n", + " if np.exp(mid) != np.inf:\n", + " left = mid\n", + " else:\n", + " right = mid\n", + " return right\n", + "\n", + "\n", + "max_int = find_maximal_exp_x()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "728c922f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "np.exp(-746) = 0.0\n", + "np.exp(-745) = 5e-324\n" + ] + } + ], + "source": [ + "print(f\"np.exp({min_int - 1}) = {np.exp(min_int - 1)}\")\n", + "print(f\"np.exp({min_int}) = {np.exp(min_int)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0b9d06a5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "np.exp(709) = 8.218407461554972e+307\n", + "np.exp(710) = inf\n" + ] + } + ], + "source": [ + "print(f\"np.exp({max_int - 1}) = {np.exp(max_int - 1)}\")\n", + "print(f\"np.exp({max_int}) = {np.exp(max_int)}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}