Last active
June 7, 2024 10:33
-
-
Save mizar/9dcae32696a03a1a0012a758fc324cd7 to your computer and use it in GitHub Desktop.
decimal_rounding_error.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "nbformat": 4, | |
| "nbformat_minor": 0, | |
| "metadata": { | |
| "colab": { | |
| "provenance": [], | |
| "authorship_tag": "ABX9TyNCp5LyUD/auAjhlGQAAiib", | |
| "include_colab_link": true | |
| }, | |
| "kernelspec": { | |
| "name": "python3", | |
| "display_name": "Python 3" | |
| }, | |
| "language_info": { | |
| "name": "python" | |
| } | |
| }, | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "id": "view-in-github", | |
| "colab_type": "text" | |
| }, | |
| "source": [ | |
| "<a href=\"https://colab.research.google.com/gist/mizar/9dcae32696a03a1a0012a758fc324cd7/decimal_rounding_error.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| }, | |
| "id": "MxAl6kX9GGAN", | |
| "outputId": "ff2f1d4d-e83a-41d3-fc5b-9c6efff8bb7d" | |
| }, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "0.0001881483434415405554543084391 +0E-27 \n", | |
| "0.4686439112877793129887381779 -2E-28 \n", | |
| "0.4955373031114877242725771383 -2E-28 \n", | |
| "0.2303266426951414140530441189 -1E-28 \n", | |
| "0.1162573779445482369275348384 +0E-27 \n", | |
| "0.7868142377753561207146801681 +0E-27 \n", | |
| "0.4603278416588289680216309266 +0E-27 \n", | |
| "0.4872791641551212303624405512 -1E-28 \n", | |
| "0.5658713320454171747067290396 +0E-27 \n", | |
| "0.4681214209630200786811256193 -1E-28 \n", | |
| "0.5778372416377828165581896810 +0E-27 \n", | |
| "0.9984287819613553173186462070 +0E-27 \n", | |
| "0.1596782927351656523332803596 +0E-27 \n", | |
| "0.9284865347810143258920247377 +0E-27 \n", | |
| "0.3163392421462190771530781942 +0E-27 \n", | |
| "0.6550081249356266548447406017 -3E-28 \n", | |
| "0.6032816167322882686003167702 +0E-27 \n", | |
| "0.06533038833398367921402468894 -1E-28 \n", | |
| "0.8466648532539280738333902885 +0E-27 \n", | |
| "0.9047939727353826315346374484 -1E-28 \n", | |
| "0.9924148685334297283027040548 +0E-27 \n", | |
| "0.8613522435099173371948094056 -2E-28 \n", | |
| "0.1252936669058218782857959048 +0E-27 \n", | |
| "0.7935736837189343815721364980 +0E-27 \n", | |
| "0.6856628946280070427367026796 +0E-27 \n", | |
| "0.4658497203611133396735281162 -1E-28 \n", | |
| "0.5217660183205865576454563173 +0E-27 \n", | |
| "0.2325274675632003292881801609 -1E-28 \n", | |
| "0.3263737335974094784053141191 +0E-27 \n", | |
| "0.6991995950225985759321010173 +0E-27 \n", | |
| "0.5039184104496712161606400991 -2E-28 \n", | |
| "0.2842674573779219122923399968 +0E-27 \n", | |
| "0.4504735215737639859594331604 -2E-28 \n", | |
| "0.6011125356735125696391790926 +0E-27 \n", | |
| "0.02657544242834733393597177172 +0E-27 \n", | |
| "0.4116419943980652772960006128 +0E-27 \n", | |
| "0.7709119264141850086579164835 +0E-27 \n", | |
| "0.4261880425525697930004663555 -1E-28 \n", | |
| "0.1360945436826449454563344406 +0E-27 \n", | |
| "0.4097392257898193287389516963 +0E-27 \n", | |
| "0.3895851956130025177011059168 -1E-28 \n", | |
| "0.6710808838285774955164213171 +0E-27 \n", | |
| "0.3547854005200968782587431753 +0E-27 \n", | |
| "0.01391524328050508834306242945 +0E-27 \n", | |
| "0.3070594209292863148739682613 +0E-27 \n", | |
| "0.4298968749926767664611606608 +0E-27 \n", | |
| "0.6063295156069307741967726961 +0E-27 \n", | |
| "0.3446134547231292537528592144 +0E-27 \n", | |
| "0.6593358580156999261895486630 +0E-27 \n", | |
| "0.5906836699879189860261534763 +0E-27 \n", | |
| "0.004343557131694803310058611166 -2E-28 \n", | |
| "0.2677249588706350871111658429 +0E-27 \n", | |
| "0.3760854957746783842705515305 +0E-27 \n", | |
| "0.08675348245591637225116913540 -2E-28 \n", | |
| "0.3130275028797333023666756163 +0E-27 \n", | |
| "0.6630251372344228663233916156 -3E-28 \n", | |
| "0.2316424793652593663289554667 -1E-28 \n", | |
| "0.8895883024913366527910167218 +0E-27 \n", | |
| "0.3448748869064983671757978986 -2E-28 \n", | |
| "0.9672425775694941302874491912 -5E-28 \n", | |
| "0.9223993438288156128330447825 -2E-28 \n", | |
| "0.4005020619513139749399341277 +0E-27 \n", | |
| "0.3548199827693256032346433375 -1E-28 \n", | |
| "0.3106703570437166558202830171 -1E-28 \n", | |
| "0.5796839681792767556263444427 -1E-28 \n", | |
| "0.4102002879370543062630409119 +0E-27 \n", | |
| "0.4897769962252555436757873553 +0E-27 \n", | |
| "0.1529909172670919434296423547 +0E-27 \n", | |
| "0.6017870694364057777264575634 +0E-27 \n", | |
| "0.009581187343038193554481224898 -4E-28 \n", | |
| "0.2764895203401406389769290946 +0E-27 \n", | |
| "0.3518987282722992064157819567 +0E-27 \n", | |
| "0.1781067401559357317379991055 +0E-27 \n", | |
| "0.6266780896495151733724316258 -1E-28 \n", | |
| "0.9399472796024895352826479118 +0E-27 \n", | |
| "0.4977870583900090160326840443 +0E-27 \n", | |
| "0.1171153364727898153751449101 +0E-27 \n", | |
| "0.8746303033948208914281510134 -3E-28 \n", | |
| "0.1562471734183820461576828891 +0E-27 \n", | |
| "0.3804712010894388373200352281 -1E-28 \n", | |
| "0.7965629157323031296266504177 -2E-28 \n", | |
| "0.2943966820133477572383318890 -1E-28 \n", | |
| "0.4712202700794501397794502666 +0E-27 \n", | |
| "0.4452743173966663912433176375 -1E-28 \n", | |
| "0.5095997899457956347740788980 +0E-27 \n", | |
| "0.8649285472012918186571725499 +0E-27 \n", | |
| "0.4276995684049795540926010315 +0E-27 \n", | |
| "0.1287908611865515810971964322 +0E-27 \n", | |
| "0.1316228148029621708046789894 +0E-27 \n", | |
| "0.9812477786880379327970485496 +0E-27 \n", | |
| "0.6057342588350780817272566240 +0E-27 \n", | |
| "0.05855638757518968482104305462 -1E-28 \n", | |
| "0.9407850748101512694418163142 -2E-28 \n", | |
| "0.9489860087564671558834056098 -4E-28 \n", | |
| "0.9166955174121178190898361972 +0E-27 \n", | |
| "0.4144814625030375782395257934 +0E-27 \n", | |
| "0.9204863766238935560276822988 +0E-27 \n", | |
| "0.3678500059019424342754975195 +0E-27 \n", | |
| "0.6227391183110678640351396742 -2E-28 \n", | |
| "0.9490657588975000732736072296 +0E-27 \n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import random\n", | |
| "import decimal\n", | |
| "\n", | |
| "prec28 = decimal.Context()\n", | |
| "\n", | |
| "for _ in range(100):\n", | |
| " a, b = random.random(), random.random()\n", | |
| " x = prec28.create_decimal_from_float(a) + prec28.create_decimal_from_float(b / 2**52)\n", | |
| " print(f\"{x:<32} {(1/x)*x-1:<+10}\")\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "import random\n", | |
| "import decimal\n", | |
| "\n", | |
| "precl = decimal.Context(prec=1)\n", | |
| "prec28 = decimal.Context()\n", | |
| "\n", | |
| "for _ in range(100):\n", | |
| " a = random.random()\n", | |
| " x = prec28.create_decimal(precl.create_decimal_from_float(a))\n", | |
| " print(f\"{x:<32} {1/x*x-1:<+10}\")\n" | |
| ], | |
| "metadata": { | |
| "id": "WJMmXRvsL45T", | |
| "outputId": "1fda43e5-6018-464f-e694-eedb0020bdeb", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| } | |
| }, | |
| "execution_count": 2, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "0.3 -1E-28 \n", | |
| "0.1 +0 \n", | |
| "0.8 +0.000 \n", | |
| "0.9 -1E-28 \n", | |
| "0.03 -1E-28 \n", | |
| "0.9 -1E-28 \n", | |
| "0.2 +0.0 \n", | |
| "0.09 -1E-28 \n", | |
| "0.2 +0.0 \n", | |
| "0.4 +0.00 \n", | |
| "0.06 +0E-27 \n", | |
| "0.1 +0 \n", | |
| "0.3 -1E-28 \n", | |
| "0.6 +0E-27 \n", | |
| "0.5 +0.0 \n", | |
| "0.7 +0E-27 \n", | |
| "0.9 -1E-28 \n", | |
| "0.2 +0.0 \n", | |
| "0.4 +0.00 \n", | |
| "0.7 +0E-27 \n", | |
| "0.3 -1E-28 \n", | |
| "0.3 -1E-28 \n", | |
| "0.4 +0.00 \n", | |
| "0.4 +0.00 \n", | |
| "0.9 -1E-28 \n", | |
| "0.4 +0.00 \n", | |
| "0.3 -1E-28 \n", | |
| "0.5 +0.0 \n", | |
| "0.05 +0.0 \n", | |
| "0.8 +0.000 \n", | |
| "0.4 +0.00 \n", | |
| "0.4 +0.00 \n", | |
| "0.4 +0.00 \n", | |
| "0.7 +0E-27 \n", | |
| "0.6 +0E-27 \n", | |
| "0.3 -1E-28 \n", | |
| "0.7 +0E-27 \n", | |
| "0.8 +0.000 \n", | |
| "1 +0 \n", | |
| "0.3 -1E-28 \n", | |
| "0.8 +0.000 \n", | |
| "0.3 -1E-28 \n", | |
| "0.7 +0E-27 \n", | |
| "0.3 -1E-28 \n", | |
| "0.9 -1E-28 \n", | |
| "0.6 +0E-27 \n", | |
| "0.6 +0E-27 \n", | |
| "0.6 +0E-27 \n", | |
| "0.2 +0.0 \n", | |
| "0.07 +0E-27 \n", | |
| "1 +0 \n", | |
| "0.2 +0.0 \n", | |
| "0.3 -1E-28 \n", | |
| "0.5 +0.0 \n", | |
| "0.4 +0.00 \n", | |
| "0.3 -1E-28 \n", | |
| "0.7 +0E-27 \n", | |
| "0.8 +0.000 \n", | |
| "0.7 +0E-27 \n", | |
| "0.2 +0.0 \n", | |
| "0.9 -1E-28 \n", | |
| "0.7 +0E-27 \n", | |
| "0.5 +0.0 \n", | |
| "0.9 -1E-28 \n", | |
| "0.6 +0E-27 \n", | |
| "0.3 -1E-28 \n", | |
| "0.6 +0E-27 \n", | |
| "0.3 -1E-28 \n", | |
| "0.4 +0.00 \n", | |
| "0.1 +0 \n", | |
| "0.1 +0 \n", | |
| "0.3 -1E-28 \n", | |
| "0.09 -1E-28 \n", | |
| "0.6 +0E-27 \n", | |
| "0.9 -1E-28 \n", | |
| "1 +0 \n", | |
| "0.1 +0 \n", | |
| "0.9 -1E-28 \n", | |
| "0.4 +0.00 \n", | |
| "0.2 +0.0 \n", | |
| "0.2 +0.0 \n", | |
| "0.1 +0 \n", | |
| "0.6 +0E-27 \n", | |
| "0.4 +0.00 \n", | |
| "0.4 +0.00 \n", | |
| "0.04 +0.00 \n", | |
| "0.4 +0.00 \n", | |
| "0.7 +0E-27 \n", | |
| "0.3 -1E-28 \n", | |
| "0.5 +0.0 \n", | |
| "0.9 -1E-28 \n", | |
| "0.6 +0E-27 \n", | |
| "0.1 +0 \n", | |
| "0.4 +0.00 \n", | |
| "0.2 +0.0 \n", | |
| "0.8 +0.000 \n", | |
| "0.7 +0E-27 \n", | |
| "0.7 +0E-27 \n", | |
| "0.7 +0E-27 \n", | |
| "0.6 +0E-27 \n" | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "source": [ | |
| "import random\n", | |
| "import decimal\n", | |
| "\n", | |
| "precl = decimal.Context(prec=3)\n", | |
| "prec28 = decimal.Context()\n", | |
| "\n", | |
| "for i in range(100):\n", | |
| " a = i / 100 + 1\n", | |
| " x = prec28.create_decimal(precl.create_decimal_from_float(a))\n", | |
| " print(f\"{x:<32} {1/x*x-1:<+10}\")\n" | |
| ], | |
| "metadata": { | |
| "id": "fkYjT6RDP4IJ", | |
| "outputId": "17635c2d-215e-4a3e-e1f8-b5723518247c", | |
| "colab": { | |
| "base_uri": "https://localhost:8080/" | |
| } | |
| }, | |
| "execution_count": 3, | |
| "outputs": [ | |
| { | |
| "output_type": "stream", | |
| "name": "stdout", | |
| "text": [ | |
| "1 +0 \n", | |
| "1.01 +0E-27 \n", | |
| "1.02 +0E-27 \n", | |
| "1.03 +0E-27 \n", | |
| "1.04 +0E-27 \n", | |
| "1.05 +0E-27 \n", | |
| "1.06 +0E-27 \n", | |
| "1.07 +0E-27 \n", | |
| "1.08 +0E-27 \n", | |
| "1.09 +0E-27 \n", | |
| "1.10 +0E-27 \n", | |
| "1.11 +0E-27 \n", | |
| "1.12 +0E-27 \n", | |
| "1.13 +0E-27 \n", | |
| "1.14 +0E-27 \n", | |
| "1.15 +0E-27 \n", | |
| "1.16 +0E-27 \n", | |
| "1.17 +0E-27 \n", | |
| "1.18 +0E-27 \n", | |
| "1.19 +0E-27 \n", | |
| "1.20 +0E-27 \n", | |
| "1.21 +0E-27 \n", | |
| "1.22 -1E-28 \n", | |
| "1.23 +0E-27 \n", | |
| "1.24 +0E-27 \n", | |
| "1.25 +0.000 \n", | |
| "1.26 +0E-27 \n", | |
| "1.27 +0E-27 \n", | |
| "1.28 +0E-7 \n", | |
| "1.29 +0E-27 \n", | |
| "1.30 +0E-27 \n", | |
| "1.31 -1E-28 \n", | |
| "1.32 +0E-27 \n", | |
| "1.33 -1E-28 \n", | |
| "1.34 +0E-27 \n", | |
| "1.35 -1E-28 \n", | |
| "1.36 +0E-27 \n", | |
| "1.37 +0E-27 \n", | |
| "1.38 +0E-27 \n", | |
| "1.39 +0E-27 \n", | |
| "1.40 +0E-27 \n", | |
| "1.41 +0E-27 \n", | |
| "1.42 +0E-27 \n", | |
| "1.43 +0E-27 \n", | |
| "1.44 -1E-28 \n", | |
| "1.45 +0E-27 \n", | |
| "1.46 +0E-27 \n", | |
| "1.47 +0E-27 \n", | |
| "1.48 +0E-27 \n", | |
| "1.49 +0E-27 \n", | |
| "1.5 +0E-27 \n", | |
| "1.51 +0E-27 \n", | |
| "1.52 -1E-28 \n", | |
| "1.53 +0E-27 \n", | |
| "1.54 +0E-27 \n", | |
| "1.55 +0E-27 \n", | |
| "1.56 +0E-27 \n", | |
| "1.57 +0E-27 \n", | |
| "1.58 +0E-27 \n", | |
| "1.59 +0E-27 \n", | |
| "1.60 +0.00000 \n", | |
| "1.61 -1E-28 \n", | |
| "1.62 +0E-27 \n", | |
| "1.63 +0E-27 \n", | |
| "1.64 +0E-27 \n", | |
| "1.65 +0E-27 \n", | |
| "1.66 +0E-27 \n", | |
| "1.67 +0E-27 \n", | |
| "1.68 -1E-28 \n", | |
| "1.69 +0E-27 \n", | |
| "1.70 +0E-27 \n", | |
| "1.71 -1E-28 \n", | |
| "1.72 -1E-28 \n", | |
| "1.73 +0E-27 \n", | |
| "1.74 +0E-27 \n", | |
| "1.75 +0E-27 \n", | |
| "1.76 +0E-27 \n", | |
| "1.77 +0E-27 \n", | |
| "1.78 +0E-27 \n", | |
| "1.79 -1E-28 \n", | |
| "1.80 +0E-27 \n", | |
| "1.81 +0E-27 \n", | |
| "1.82 +0E-27 \n", | |
| "1.83 +0E-27 \n", | |
| "1.84 +0E-27 \n", | |
| "1.85 -1E-28 \n", | |
| "1.86 +0E-27 \n", | |
| "1.87 +0E-27 \n", | |
| "1.88 +0E-27 \n", | |
| "1.89 +0E-27 \n", | |
| "1.90 +0E-27 \n", | |
| "1.91 +0E-27 \n", | |
| "1.92 -1E-28 \n", | |
| "1.93 +0E-27 \n", | |
| "1.94 +0E-27 \n", | |
| "1.95 +0E-27 \n", | |
| "1.96 +0E-27 \n", | |
| "1.97 -1E-28 \n", | |
| "1.98 +0E-27 \n", | |
| "1.99 -1E-28 \n" | |
| ] | |
| } | |
| ] | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment