{ "cells": [ { "cell_type": "markdown", "id": "013d1a30-ab97-44eb-ae6f-549e02d0316f", "metadata": {}, "source": [ "# The *significance* of significant digits" ] }, { "cell_type": "markdown", "id": "6516b568-cdd8-4545-abb6-269d30843dda", "metadata": {}, "source": [ "As illustrated in the xx file, besides typical linguistic hedges (i.e. \"about 7\") which indicate uncertainty, the number (i.e. 7 or 7.0) per se indicate uncertainty as well. Significant digits are established ways among engineers to indicate how precise they can be about the measurements. With the concept of *uncertain number*, `pyuncertainnumber` facilitates the expression of such significance in computations." ] }, { "cell_type": "code", "execution_count": 1, "id": "190d453e-d8b7-4076-ac64-e1e98c1bad6b", "metadata": {}, "outputs": [], "source": [ "import pyuncertainnumber as pun\n", "from pyuncertainnumber.characterisation.utils import sgnumber" ] }, { "cell_type": "code", "execution_count": 2, "id": "3ce9c340-6b5f-4409-805a-1c4e4f2f4de0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "Interpreting significant digits\n", " 200.000\t [199.9995, 200.0005]\n", " 200.00\t [199.995, 200.005]\n", " 200.0\t [199.95, 200.05]\n", " 200.\t [199.5, 200.5]\n", " 20.e1\t [195.0, 205.0]\n", " 1.23\t [1.225, 1.2349999999999999]\n", " 1.2300\t [1.2299499999999999, 1.23005]\n", " 12.3\t [12.25, 12.350000000000001]\n", " 1.23e8\t [122500000.0, 123500000.0]\n", " 12.3e2\t [1225.0, 1235.0]\n", " 12.3e-4\t [0.001225, 0.001235]\n", " 12300\t [12250.0, 12350.0]\n", " 12300e4\t [122500000.0, 123500000.0]\n", " 9\t [8.5, 9.5]\n", " 2e2\t [150.0, 250.0]\n", " 200\t [150.0, 250.0]\n", " 10\t [5.0, 15.0]\n", " 1000\t [500.0, 1500.0]\n", " 1000000\t [500000.0, 1500000.0]\n", " 123400\t [123350.0, 123450.0]\n", " 12000\t [11500.0, 12500.0]\n" ] } ], "source": [ "print(\"\\n\\nInterpreting significant digits\")\n", "\n", "def unumber(s):\n", " return pun.I(s).intervals\n", "\n", "def outs(s):\n", " return \"{:>10}\\t\".format(s)\n", "\n", "s = \"200.000\"\n", "print(outs(s), sgnumber(s)) # [ 199.9995, 200.0005]\n", "s = \"200.00\"\n", "print(outs(s), sgnumber(s)) # [ 199.995, 200.005]\n", "s = \"200.0\"\n", "print(outs(s), sgnumber(s)) # [ 199.95, 200.05]\n", "s = \"200.\"\n", "print(outs(s), sgnumber(s)) # [ 199.5, 200.5]\n", "s = \"20.e1\"\n", "print(outs(s), sgnumber(s)) # [ 195, 205]\n", "s = \"1.23\"\n", "print(outs(s), sgnumber(s)) # 1.225, 1.235 # the extra nines are a 'feature' of Python\n", "s = \"1.2300\"\n", "print(outs(s), sgnumber(s)) # 1.22995, 1.23005\n", "s = \"12.3\"\n", "print(outs(s), sgnumber(s)) # 12.25, 12.35\n", "s = \"1.23e8\"\n", "print(outs(s), sgnumber(s)) # 122500000.0, 123500000.0\n", "s = \"12.3e2\"\n", "print(outs(s), sgnumber(s)) # 1225.0, 1235.0\n", "s = \"12.3e-4\"\n", "print(outs(s), sgnumber(s)) # 0.001225, 0.001235\n", "s = \"12300\"\n", "print(outs(s), sgnumber(s)) # 12250.0, 12350.0\n", "s = \"12300e4\"\n", "print(outs(s), sgnumber(s)) # 122500000.0, 123500000.0\n", "s = \"9\"\n", "print(outs(s), sgnumber(s)) # 8.5,9.5\n", "s = \"2e2\"\n", "print(outs(s), sgnumber(s)) # 150, 250\n", "s = \"200\"\n", "print(outs(s), sgnumber(s)) # 150,250\n", "s = \"10\"\n", "print(outs(s), sgnumber(s)) # 5,15\n", "s = \"1000\"\n", "print(outs(s), sgnumber(s)) # 500,1500\n", "s = \"1000000\"\n", "print(outs(s), sgnumber(s)) # 5e5,15e5\n", "s = \"123400\"\n", "print(outs(s), sgnumber(s)) # 123350,123450\n", "s = \"12000\"\n", "print(outs(s), sgnumber(s)) # 11500,12500\n" ] }, { "cell_type": "code", "execution_count": null, "id": "5344fca1-71e2-47a2-97ab-d8d535afadd5", "metadata": {}, "outputs": [], "source": [] } ], "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.11.10" } }, "nbformat": 4, "nbformat_minor": 5 }