From dbe133992e504c3036a0b16e5e696417ebcbb085 Mon Sep 17 00:00:00 2001 From: pattaraporn <pattaraporn.in.59@ubu.ac.th> Date: Thu, 8 Feb 2018 12:31:37 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B8=AA=E0=B9=88=E0=B8=87=E0=B8=87=E0=B8=B2?= =?UTF-8?q?=E0=B8=99=E0=B8=84=E0=B9=88=E0=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week01/hello.py | 1 + week02/hellomodule.py | 2 + ...merics and Error Analysis-checkpoint.ipynb | 482 ++++++++++++++++++ ...apter 03 Numerics and Error Analysis.ipynb | 480 +++++++++++++++++ week03/assignment.py | 12 + week04/__pycache__/assignment.cpython-36.pyc | Bin 0 -> 801 bytes week04/assignment.py | 8 + 7 files changed, 985 insertions(+) create mode 100644 week01/hello.py create mode 100644 week02/hellomodule.py create mode 100644 week03/.ipynb_checkpoints/Chapter 03 Numerics and Error Analysis-checkpoint.ipynb create mode 100644 week03/Chapter 03 Numerics and Error Analysis.ipynb create mode 100644 week03/assignment.py create mode 100644 week04/__pycache__/assignment.cpython-36.pyc create mode 100644 week04/assignment.py diff --git a/week01/hello.py b/week01/hello.py new file mode 100644 index 0000000..75d9766 --- /dev/null +++ b/week01/hello.py @@ -0,0 +1 @@ +print('hello world') diff --git a/week02/hellomodule.py b/week02/hellomodule.py new file mode 100644 index 0000000..f7c21b6 --- /dev/null +++ b/week02/hellomodule.py @@ -0,0 +1,2 @@ +# cookiecutter ..... +print("we' ve done it.") diff --git a/week03/.ipynb_checkpoints/Chapter 03 Numerics and Error Analysis-checkpoint.ipynb b/week03/.ipynb_checkpoints/Chapter 03 Numerics and Error Analysis-checkpoint.ipynb new file mode 100644 index 0000000..121028a --- /dev/null +++ b/week03/.ipynb_checkpoints/Chapter 03 Numerics and Error Analysis-checkpoint.ipynb @@ -0,0 +1,482 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เธเธ—เธ—เธตเน 1 เธ•เธฑเธงเน€เธฅเธเนเธฅเธฐเธเธฒเธฃเธงเธดเน€เธเธฃเธฒเธฐเธซเนเธเธงเธฒเธกเธเธฅเธฒเธ”เน€เธเธฅเธทเนเธญเธ\n", + "\n", + "> Mathematically correct programming bug is **hard** to spot.\n", + "\n", + "> เธชเธกเธเธฒเธฃเธ–เธนเธเนเธ•เน...เนเธเธฃเนเธเธฃเธกเธเธดเธ”\n", + "\n", + ">> Paulgramming - 2017\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เธ•เธฑเธงเน€เธฅเธเนเธฅเธฐเธเธงเธฒเธกเธเธฅเธฒเธ”เน€เธเธฅเธทเนเธญเธเนเธเนเธเธฃเนเธเธฃเธก\n", + "## C++\n", + "\n", + "```c++\n", + "#include <iostream>\n", + "using namespace std;\n", + "main() {\n", + " float x = 1.0; \n", + " float y = x / 3.0;\n", + " cout << ((x == y * 3.0)?\"\": \"Not\") << \" Equal\" << endl;\n", + "}\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# เธ•เธฑเธงเน€เธฅเธเนเธฅเธฐเธเธงเธฒเธกเธเธฅเธฒเธ”เน€เธเธฅเธทเนเธญเธเนเธเนเธเธฃเนเธเธฃเธก\n", + "## Java\n", + "\n", + "```java\n", + "public class Test {\n", + " public static void main(String[] a) {\n", + " float x = 1.0;\n", + " float y = x / 3.0;\n", + " System.out.println( ((x == y * 3.0)?\"\": \"Not\") + \" Equal\" );\n", + " }\n", + "}\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# เธ•เธฑเธงเน€เธฅเธเนเธฅเธฐเธเธงเธฒเธกเธเธฅเธฒเธ”เน€เธเธฅเธทเนเธญเธเนเธเนเธเธฃเนเธเธฃเธก\n", + "## Python\n", + "\n", + "```python\n", + "x = 1.0\n", + "y = x / 3.0\n", + "print(\"Equal\" if x == y*3.0 else \"Not Equal\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "# เธกเธตเธซเธฅเธฒเธขเธ•เธฑเธงเน€เธฅเธเธ—เธตเนเนเธกเน\n", + "x = 1.0\n", + "y = x / 3.0\n", + "#print(\"Equal\" if x == y*3.0 else \"Not Equal\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เธกเธตเธซเธฅเธฒเธขเธ•เธฑเธงเน€เธฅเธเธ—เธตเนเธเธญเธกเน€เธเนเธเธเนเธฒเนเนเธกเนเนเธ”เน\n", + "\n", + "* เธ•เธฑเธงเน€เธฅเธเธ—เธตเนเธเธญเธกเธเธดเธงเน€เธ•เธญเธฃเนเธ•เนเธญเธเธเธฃเธฐเธกเธฒเธ“เธเธฒเธฃ (Inexact numbers)\n", + " * เธเนเธฒเธญเธ•เธฃเธฃเธเธขเธฐ (irrational numbers) $\\pi, \\e, ...$\n", + " * เธเนเธฒเธ•เธฃเธฃเธเธขเธฐ (rational numbers) เธ—เธตเนเนเธกเนเธชเธฒเธกเธฒเธฃเธ–เนเธเธฅเธเน€เธเนเธเน€เธฅเธเธเธฒเธเธชเธญเธเนเธ”เน\n", + "```python\n", + "0.1 + 0.2 == 0.3\n", + "```\n", + "\n", + "* เธ•เธฑเธงเน€เธฅเธเธ—เธตเนเธเธญเธกเธเธดเธงเน€เธ•เธญเธฃเนเธชเธฒเธกเธฒเธฃเธ–เน€เธเนเธเธเนเธฒเนเธ”เนเธ•เธฃเธ (Exact numbers)\n", + "> เธ•เธฑเธงเน€เธฅเธเธ—เธตเนเธชเธฒเธกเธฒเธฃเธ–เนเธเธฅเธเนเธซเนเน€เธเนเธเน€เธฅเธเธเธฒเธเธชเธญเธเนเธ”เน" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Floating-Point Binary\n", + "\n", + "> เธ•เธฑเธงเน€เธฅเธ(number) เน€เธเธตเธขเธเนเธ—เธเธ”เนเธงเธขเธชเธฒเธขเธเธญเธเน€เธฅเธเน€เธ”เธตเนเธขเธง(digit) เนเธ”เธขเธเธณเธเธงเธเธเธญเธเน€เธฅเธเน€เธ”เธตเนเธขเธง เธเธถเนเธเธญเธขเธนเนเธเธฑเธ เน€เธฅเธเธเธฒเธ(base)\n", + "\n", + "เนเธเธฃเธฐเธเธเธเธณเธเธงเธเธเธฑเธเธเธญเธเธเธเน€เธฃเธฒเธเธฐเน€เธเนเธเน€เธฅเธเธเธฒเธ 10 เนเธ”เธขเธกเธต digit เธ—เธตเนเนเธเนเนเธ”เนเนเธ”เนเนเธเน 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n", + "เธขเธเธ•เธฑเธงเธญเธขเนเธฒเธเธ•เธฑเธงเน€เธฅเธเนเธเน€เธฅเธเธเธฒเธ 10 เน€เธเนเธ 128 77 12100 เน€เธเนเธเธ•เนเธ\n", + "\n", + "เธ•เธฑเธงเน€เธฅเธเธ—เธตเนเนเธเนเนเธเธเธญเธกเธเธดเธงเน€เธ•เธญเธฃเนเธเธฐเน€เธเนเธเน€เธฅเธเธเธฒเธ 2 เนเธ”เธขเธกเธต digit เธ—เธตเนเนเธเนเนเธ”เน เนเธ”เนเนเธเน 0 เนเธฅเธฐ 1 \n", + "เธขเธเธ•เธฑเธงเธญเธขเนเธฒเธเธ•เธฑเธงเน€เธฅเธเนเธเน€เธฅเธเธเธฒเธ 2 เน€เธเนเธ 1, 101, 1101 เน€เธเนเธเธ•เนเธ" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Terminology\n", + "** Bit **\n", + ": 0 or 1\n", + "\n", + "** Byte ** \n", + ": 8 bits\n", + "\n", + "** Real **\n", + ": 4 bytes **single precision**\n", + ": 8 bytes **double precision**\n", + "\n", + "** Integer **\n", + ": 1, 2, 4, or 8 byte signed\n", + ": 1, 2, 4, or 8 byte unsigned\n", + "\n", + "> เธเธถเนเธเธญเธขเธนเนเธเธฑเธเธ เธฒเธฉเธฒเนเธเธฃเนเธเธฃเธกเธงเนเธฒเธเธฐเนเธเนเธชเธฒเธขเธ—เธตเนเธกเธตเธเธงเธฒเธกเธขเธฒเธงเน€เธ—เนเธฒเนเธซเธฃเน 8, 16, 32 เธซเธฃเธทเธญ 64 เน€เธเนเธเธ•เนเธ\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เธเนเธญเธ•เธเธฅเธ\n", + "\n", + "* เน€เธเธทเนเธญเธเนเธฒเธขเธ•เนเธญเธเธฒเธฃเธเธณเธเธงเธ“เน€เธฃเธฒเธเธฐเนเธเนเธชเธฒเธขเธ—เธตเนเธกเธตเธเธงเธฒเธกเธขเธฒเธง 8 เนเธฅเธฐเน€เธเธตเธขเธเนเธขเธเน€เธเนเธเธเธฅเธธเนเธกเธฅเธฐ 4 เน€เธเธทเนเธญเธเนเธฒเธขเธ•เนเธญเธเธฒเธฃเธเธณเธเธงเธ \n", + "\n", + "> เน€เธเนเธ 1 = 0000 0001\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Binary $\\rightarrow$ Integer\n", + "\n", + "| | | | | | | | |\n", + "|------|------|------|------|------|------|------|------|\n", + "| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 |\n", + "|$2^7$ |$2^6$ |$2^5$ |$2^4$ |$2^3$ |$2^2$ |$2^1$ |$2^0$ |\n", + "\n", + "$1\\times2^7 + 1\\times2^6 + 1\\times2^5 + 0\\times2^4 + 0\\times2^3 + 1\\times2^2 + 1\\times2^1 + 1\\times2^0$\n", + "\n", + "$1\\times 128+ 1\\times 64 + 1\\times 32 + 0\\times 16 + 0\\times 8 + 1\\times 4 + 1\\times 2 + 1 \\times 1$\n", + "\n", + "\n", + "$128 + 64 + 32 + 0 + 0 + 4 + 2 + 1$\n", + "\n", + "**Answer**\n", + "> $231$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เน€เธเธตเธขเธเนเธเธฃเนเธเธฃเธกเธ—เธ”เธชเธญเธ\n", + "\n", + "* เธเธณเธเธงเธ“เธซเธฒเธเธฅเธฅเธฑเธเธเน\n", + "```python\n", + "1*2**7 + 1*2**6 + 1*2**5 + 0*2**4 + 0*2**3 + 1*2**2 + 1*2**1 + 1*2**0\n", + "```\n", + "\n", + "* เธเธณเธชเธฑเนเธเนเธเธฅเธเน€เธฅเธเธเธฒเธเธ•เนเธฒเธเน\n", + "```python\n", + "int('11100111', 2) # เนเธเธฅเธ str '11100111' เธเธฒเธ 2 เน€เธเนเธ int\n", + "oct(35) # เนเธเธฅเธ 35 เธเธฒเธเธชเธดเธ เนเธซเนเน€เธเนเธเธเธฒเธ 8\n", + "hex(35) # เนเธเธฅเธ 35 เธเธฒเธเธชเธดเธ เนเธซเนเน€เธเนเธเธเธฒเธ 16\n", + "bin(35) # เนเธเธฅเธ 35 เธเธฒเธเธชเธดเธ เนเธซเนเน€เธเนเธเธเธฒเธ 2\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "#int('11100111', 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "#### Exercise\n", + "เธเธเนเธชเธ”เธเธเธฒเธฃเนเธเธฅเธเธ•เธฑเธงเน€เธฅเธเธเธฒเธเธชเธญเธเธ•เนเธญเนเธเธเธตเนเน€เธเนเธเธเธณเธเธงเธเน€เธ•เนเธก\n", + "* 10011001\n", + "* 00010011\n", + "* 00011111" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Binary $\\rightarrow$ Float\n", + "เธเธณเธซเธเธ”เธ•เธณเนเธซเธเนเธเธ—เธตเนเน€เธฅเธเธชเธญเธเธเธณเธฅเธฑเธเน€เธเนเธเธจเธนเธเธขเน (fix-point representation)\n", + "\n", + "| | | | | | | | |\n", + "|------|------|------|------|------|------|------|------|\n", + "| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 |\n", + "|$2^5$ |$2^4$ |$2^3$ |$2^2$ |$2^1$ |$2^0$ |$2^-1$ |$2^-2$ |\n", + "\n", + "$1\\times 2^5+1\\times 2^4+1\\times 2^3+0\\times 2^2+9\\times 2^1+1\\times 2^0+1\\times 2^{-1}+1\\times 2^{-2}$\n", + "\n", + "$1\\times2^5 + 1\\times2^4 + 1\\times2^3 +0\\times 2^2+0\\times2^1+1\\times 1+\\frac{1}{2}+\\frac{1}{4}$\n", + "\n", + "$32 + 16 + 8 + 0 + 0 + 1 + 0.5 + 0.25$\n", + "\n", + "**Answer**\n", + "> 57.75" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "#1*2**5 + 1*2**4 + 1*2**3 + 0*2**2 + 0*2**1 + 1*2**0 + 1*2**(-1) + 1*2**(-2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "#### Binary Fixed-Point Arithmetic\n", + "| | | | | | | | | |\n", + "|------|------|------|------|------|------|------|------|------|\n", + "| 1 | 1 | 1 | ... | 0 | 0 | ... | 1 | 1 |\n", + "| sign ||$2^{m-1}$ |$2^{m-2}$ | ... |$2^0$ |$2^{-1}$ | ... |$2^{-n+1}$ |$2^{-n}$ |\n", + "\n", + "* Parameters: $m, n \\in Z$\n", + "* $m$ เธเธงเธฒเธกเธขเธฒเธงเธเธญเธเธชเธฒเธข(เธเธณเธเธงเธ bit) เธ—เธตเนเนเธเนเน€เธเนเธเธเธณเธเธงเธเน€เธ•เนเธก(integer portion)\n", + "* $n$ เธเธงเธฒเธกเธขเธฒเธงเธเธญเธเธชเธฒเธข(เธเธณเธเธงเธ bit) เธ—เธตเนเนเธเนเน€เธเนเธเธ•เธฑเธงเธซเธฒเธฃ(fractional portion)\n", + "* เธเธงเธฒเธกเธขเธฒเธงเธ—เธฑเนเธเธซเธกเธ”เธเธญเธเธชเธฒเธขเน€เธเนเธ $m+n+1$ เธฃเธงเธกเธเธฑเธ bit เธ—เธตเนเนเธเนเธเธญเธเน€เธเธฃเธทเนเธญเธเธซเธกเธฒเธข (+/-)\n", + "* เธเธงเธฒเธกเธฃเธนเนเน€เธเธดเนเธกเน€เธ•เธดเธก: [Fixed-Point Numbers](https://en.wikibooks.org/wiki/Floating_Point/Fixed-Point_Numbers)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Error in Binary Fixed-Point Arithmetic\n", + "\n", + "** เธชเธกเธกเธ•เธดเธงเนเธฒเธกเธตเนเธเน 2 bit เนเธซเนเนเธเน ** \n", + "\n", + "> $m = 1, n=1$ เนเธ”เธขเธ—เธตเนเนเธกเนเธเธดเธ” sign bit\n", + "\n", + "$0.1 \\times 0.1 = 0.01 \\approx 0.0$ \n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Binary Floating-Point Arithmetic\n", + "1. IEEE single precision format\n", + "\n", + "| 0 | 1-8 | 9-31 |\n", + "|:----:|:-------------:|:-----------------:|\n", + "| $s$ | $e$ | $f$ |\n", + "| $0$ | $00001001$ | $0011011...01$ |\n", + "\n", + "$ = (-1)^s \\times 2^{e-127} \\times 1.f $\n", + "\n", + "เนเธ”เธขเธ—เธตเน\n", + " * **sign** $s \\in {0, 1}$\n", + " * **biased exponent** $0 \\le e \\le 255$\n", + " * **exponent** $p=e-127$ so $-126 \\le p \\le 127$\n", + " * **significand** $1.f$ " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Binary Floating-Point Arithmetic \n", + "2. IEEE double precision format\n", + "\n", + "| 0 | 1-11 | 12-63 |\n", + "|:----:|:-------------:|:-----------------:|\n", + "| $s$ | $e$ | $f$ |\n", + "| $0$ | $00001000111$ | $0011011...01$ |\n", + "\n", + "$ = (-1)^s \\times 2^{e-1023} \\times 1.f $\n", + "\n", + "เนเธ”เธขเธ—เธตเน\n", + " * **sign** $s \\in {0, 1}$\n", + " * **biased exponent** $0 \\le e \\le 2047$\n", + " * **exponent** $p=e-1023$ so $-1022 \\le p \\le 1024$\n", + " * **significand** $x = 1.f$ " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Example \n", + "\n", + "เธเธเน€เธเธตเธขเธเธเธณเธชเธฑเนเธเน€เธเธทเนเธญเธซเธฒเธเนเธฒเธเธญเธเธ•เธฑเธงเน€เธฅเธเธ•เธฒเธกเธเนเธญเธ•เนเธญเธเธณเธซเธเธ”เธ•เนเธญเนเธเธเธตเน เนเธ”เธขเนเธเน IEEE single precision format\n", + "> 0 1111 0000 0000 1010 0000 0000 0000 000\n", + " \n", + "**Answer** \n", + "เธซเธฒเธเนเธฒ $s, e, f$ เธเธฒเธเนเธเธ—เธขเน\n", + "> $s = 0$\n", + "\n", + "> $e$ = 11110000\n", + "\n", + "> $f$ = 0000101 \n", + "\n", + "```python\n", + "s = 0\n", + "e = int('11110000', 2)\n", + "x = 1 + 0*2**(-1) + 0*2**(-2) + 0*2**(-3) + 0*2**(-4) + 1*2**(-5) + 0*2**(-6) + 1*2**(-7)\n", + "print( (-1)**s * 2**(e-127) * x )\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Exercise \n", + "1. เธเธเน€เธเธตเธขเธเธเธณเธชเธฑเนเธเน€เธเธทเนเธญเธซเธฒเธเนเธฒเธเธญเธเธ•เธฑเธงเน€เธฅเธเธ•เธฒเธกเธเนเธญเธ•เนเธญเธเธณเธซเธเธ”เธ•เนเธญเนเธเธเธตเน เนเธ”เธขเนเธเน IEEE single precision format\n", + " * $s = 0$\n", + " * $e$ = 1111 0000 0000\n", + " * $f$ = 0000 1010 \n", + " \n", + "2. เธเธเน€เธเธตเธขเธเธเธณเธชเธฑเนเธเน€เธเธทเนเธญเธซเธฒเธเนเธฒเธเธญเธเธ•เธฑเธงเน€เธฅเธเธ•เธฒเธกเธเนเธญเธ•เนเธญเธเธณเธซเธเธ”เธ•เนเธญเนเธเธเธตเน เนเธ”เธขเนเธเน IEEE double precision format\n", + " * $s = 1$\n", + " * $e$ = 0000 0011 0000\n", + " * $f$ = 0110 1010 \n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Error Calculation\n", + "\n", + "* **Absolute Error** \n", + " $\\rightarrow E_{abs} = \\| x_0 - x \\|$\n", + "* **Relative Error**\n", + " $\\rightarrow E_{rel} = \\frac { E_{abs} }{x} $\n", + "* **Percentage Error**\n", + " $\\rightarrow E_{per} = E_{rel} \\times 100$" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "celltoolbar": "Slideshow", + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/week03/Chapter 03 Numerics and Error Analysis.ipynb b/week03/Chapter 03 Numerics and Error Analysis.ipynb new file mode 100644 index 0000000..df4f30a --- /dev/null +++ b/week03/Chapter 03 Numerics and Error Analysis.ipynb @@ -0,0 +1,480 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เธเธ—เธ—เธตเน 1 เธ•เธฑเธงเน€เธฅเธเนเธฅเธฐเธเธฒเธฃเธงเธดเน€เธเธฃเธฒเธฐเธซเนเธเธงเธฒเธกเธเธฅเธฒเธ”เน€เธเธฅเธทเนเธญเธ\n", + "\n", + "> Mathematically correct programming bug is **hard** to spot.\n", + "\n", + "> เธชเธกเธเธฒเธฃเธ–เธนเธเนเธ•เน...เนเธเธฃเนเธเธฃเธกเธเธดเธ”\n", + "\n", + ">> Paulgramming - 2017\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เธ•เธฑเธงเน€เธฅเธเนเธฅเธฐเธเธงเธฒเธกเธเธฅเธฒเธ”เน€เธเธฅเธทเนเธญเธเนเธเนเธเธฃเนเธเธฃเธก\n", + "## C++\n", + "\n", + "```c++\n", + "#include <iostream>\n", + "using namespace std;\n", + "main() {\n", + " float x = 1.0; \n", + " float y = x / 3.0;\n", + " cout << ((x == y * 3.0)?\"\": \"Not\") << \" Equal\" << endl;\n", + "}\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# เธ•เธฑเธงเน€เธฅเธเนเธฅเธฐเธเธงเธฒเธกเธเธฅเธฒเธ”เน€เธเธฅเธทเนเธญเธเนเธเนเธเธฃเนเธเธฃเธก\n", + "## Java\n", + "\n", + "```java\n", + "public class Test {\n", + " public static void main(String[] a) {\n", + " float x = 1.0;\n", + " float y = x / 3.0;\n", + " System.out.println( ((x == y * 3.0)?\"\": \"Not\") + \" Equal\" );\n", + " }\n", + "}\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# เธ•เธฑเธงเน€เธฅเธเนเธฅเธฐเธเธงเธฒเธกเธเธฅเธฒเธ”เน€เธเธฅเธทเนเธญเธเนเธเนเธเธฃเนเธเธฃเธก\n", + "## Python\n", + "\n", + "```python\n", + "x = 1.0\n", + "y = x / 3.0\n", + "print(\"Equal\" if x == y*3.0 else \"Not Equal\")\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "# เธกเธตเธซเธฅเธฒเธขเธ•เธฑเธงเน€เธฅเธเธ—เธตเนเนเธกเน\n", + "x = 1.0\n", + "y = x / 3.0\n", + "#print(\"Equal\" if x == y*3.0 else \"Not Equal\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เธกเธตเธซเธฅเธฒเธขเธ•เธฑเธงเน€เธฅเธเธ—เธตเนเธเธญเธกเน€เธเนเธเธเนเธฒเนเนเธกเนเนเธ”เน\n", + "\n", + "* เธ•เธฑเธงเน€เธฅเธเธ—เธตเนเธเธญเธกเธเธดเธงเน€เธ•เธญเธฃเนเธ•เนเธญเธเธเธฃเธฐเธกเธฒเธ“เธเธฒเธฃ (Inexact numbers)\n", + " * เธเนเธฒเธญเธ•เธฃเธฃเธเธขเธฐ (irrational numbers) $\\pi, \\e, ...$\n", + " * เธเนเธฒเธ•เธฃเธฃเธเธขเธฐ (rational numbers) เธ—เธตเนเนเธกเนเธชเธฒเธกเธฒเธฃเธ–เนเธเธฅเธเน€เธเนเธเน€เธฅเธเธเธฒเธเธชเธญเธเนเธ”เน\n", + "```python\n", + "0.1 + 0.2 == 0.3\n", + "```\n", + "\n", + "* เธ•เธฑเธงเน€เธฅเธเธ—เธตเนเธเธญเธกเธเธดเธงเน€เธ•เธญเธฃเนเธชเธฒเธกเธฒเธฃเธ–เน€เธเนเธเธเนเธฒเนเธ”เนเธ•เธฃเธ (Exact numbers)\n", + "> เธ•เธฑเธงเน€เธฅเธเธ—เธตเนเธชเธฒเธกเธฒเธฃเธ–เนเธเธฅเธเนเธซเนเน€เธเนเธเน€เธฅเธเธเธฒเธเธชเธญเธเนเธ”เน" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Floating-Point Binary\n", + "\n", + "> เธ•เธฑเธงเน€เธฅเธ(number) เน€เธเธตเธขเธเนเธ—เธเธ”เนเธงเธขเธชเธฒเธขเธเธญเธเน€เธฅเธเน€เธ”เธตเนเธขเธง(digit) เนเธ”เธขเธเธณเธเธงเธเธเธญเธเน€เธฅเธเน€เธ”เธตเนเธขเธง เธเธถเนเธเธญเธขเธนเนเธเธฑเธ เน€เธฅเธเธเธฒเธ(base)\n", + "\n", + "เนเธเธฃเธฐเธเธเธเธณเธเธงเธเธเธฑเธเธเธญเธเธเธเน€เธฃเธฒเธเธฐเน€เธเนเธเน€เธฅเธเธเธฒเธ 10 เนเธ”เธขเธกเธต digit เธ—เธตเนเนเธเนเนเธ”เนเนเธ”เนเนเธเน 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n", + "เธขเธเธ•เธฑเธงเธญเธขเนเธฒเธเธ•เธฑเธงเน€เธฅเธเนเธเน€เธฅเธเธเธฒเธ 10 เน€เธเนเธ 128 77 12100 เน€เธเนเธเธ•เนเธ\n", + "\n", + "เธ•เธฑเธงเน€เธฅเธเธ—เธตเนเนเธเนเนเธเธเธญเธกเธเธดเธงเน€เธ•เธญเธฃเนเธเธฐเน€เธเนเธเน€เธฅเธเธเธฒเธ 2 เนเธ”เธขเธกเธต digit เธ—เธตเนเนเธเนเนเธ”เน เนเธ”เนเนเธเน 0 เนเธฅเธฐ 1 \n", + "เธขเธเธ•เธฑเธงเธญเธขเนเธฒเธเธ•เธฑเธงเน€เธฅเธเนเธเน€เธฅเธเธเธฒเธ 2 เน€เธเนเธ 1, 101, 1101 เน€เธเนเธเธ•เนเธ" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Terminology\n", + "** Bit **\n", + ": 0 or 1\n", + "\n", + "** Byte ** \n", + ": 8 bits\n", + "\n", + "** Real **\n", + ": 4 bytes **single precision**\n", + ": 8 bytes **double precision**\n", + "\n", + "** Integer **\n", + ": 1, 2, 4, or 8 byte signed\n", + ": 1, 2, 4, or 8 byte unsigned\n", + "\n", + "> เธเธถเนเธเธญเธขเธนเนเธเธฑเธเธ เธฒเธฉเธฒเนเธเธฃเนเธเธฃเธกเธงเนเธฒเธเธฐเนเธเนเธชเธฒเธขเธ—เธตเนเธกเธตเธเธงเธฒเธกเธขเธฒเธงเน€เธ—เนเธฒเนเธซเธฃเน 8, 16, 32 เธซเธฃเธทเธญ 64 เน€เธเนเธเธ•เนเธ\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เธเนเธญเธ•เธเธฅเธ\n", + "\n", + "* เน€เธเธทเนเธญเธเนเธฒเธขเธ•เนเธญเธเธฒเธฃเธเธณเธเธงเธ“เน€เธฃเธฒเธเธฐเนเธเนเธชเธฒเธขเธ—เธตเนเธกเธตเธเธงเธฒเธกเธขเธฒเธง 8 เนเธฅเธฐเน€เธเธตเธขเธเนเธขเธเน€เธเนเธเธเธฅเธธเนเธกเธฅเธฐ 4 เน€เธเธทเนเธญเธเนเธฒเธขเธ•เนเธญเธเธฒเธฃเธเธณเธเธงเธ \n", + "\n", + "> เน€เธเนเธ 1 = 0000 0001\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Binary $\\rightarrow$ Integer\n", + "\n", + "| | | | | | | | |\n", + "|------|------|------|------|------|------|------|------|\n", + "| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 |\n", + "|$2^7$ |$2^6$ |$2^5$ |$2^4$ |$2^3$ |$2^2$ |$2^1$ |$2^0$ |\n", + "\n", + "$1\\times2^7 + 1\\times2^6 + 1\\times2^5 + 0\\times2^4 + 0\\times2^3 + 1\\times2^2 + 1\\times2^1 + 1\\times2^0$\n", + "\n", + "$1\\times 128+ 1\\times 64 + 1\\times 32 + 0\\times 16 + 0\\times 8 + 1\\times 4 + 1\\times 2 + 1 \\times 1$\n", + "\n", + "\n", + "$128 + 64 + 32 + 0 + 0 + 4 + 2 + 1$\n", + "\n", + "**Answer**\n", + "> $231$" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# เน€เธเธตเธขเธเนเธเธฃเนเธเธฃเธกเธ—เธ”เธชเธญเธ\n", + "\n", + "* เธเธณเธเธงเธ“เธซเธฒเธเธฅเธฅเธฑเธเธเน\n", + "```python\n", + "1*2**7 + 1*2**6 + 1*2**5 + 0*2**4 + 0*2**3 + 1*2**2 + 1*2**1 + 1*2**0\n", + "```\n", + "\n", + "* เธเธณเธชเธฑเนเธเนเธเธฅเธเน€เธฅเธเธเธฒเธเธ•เนเธฒเธเน\n", + "```python\n", + "int('11100111', 2) # เนเธเธฅเธ str '11100111' เธเธฒเธ 2 เน€เธเนเธ int\n", + "oct(35) # เนเธเธฅเธ 35 เธเธฒเธเธชเธดเธ เนเธซเนเน€เธเนเธเธเธฒเธ 8\n", + "hex(35) # เนเธเธฅเธ 35 เธเธฒเธเธชเธดเธ เนเธซเนเน€เธเนเธเธเธฒเธ 16\n", + "bin(35) # เนเธเธฅเธ 35 เธเธฒเธเธชเธดเธ เนเธซเนเน€เธเนเธเธเธฒเธ 2\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "#int('11100111', 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "#### Exercise\n", + "เธเธเนเธชเธ”เธเธเธฒเธฃเนเธเธฅเธเธ•เธฑเธงเน€เธฅเธเธเธฒเธเธชเธญเธเธ•เนเธญเนเธเธเธตเนเน€เธเนเธเธเธณเธเธงเธเน€เธ•เนเธก\n", + "* 10011001\n", + "* 00010011\n", + "* 00011111" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Binary $\\rightarrow$ Float\n", + "เธเธณเธซเธเธ”เธ•เธณเนเธซเธเนเธเธ—เธตเนเน€เธฅเธเธชเธญเธเธเธณเธฅเธฑเธเน€เธเนเธเธจเธนเธเธขเน (fix-point representation)\n", + "\n", + "| | | | | | | | |\n", + "|------|------|------|------|------|------|------|------|\n", + "| 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 |\n", + "|$2^5$ |$2^4$ |$2^3$ |$2^2$ |$2^1$ |$2^0$ |$2^-1$ |$2^-2$ |\n", + "\n", + "$1\\times 2^5+1\\times 2^4+1\\times 2^3+0\\times 2^2+9\\times 2^1+1\\times 2^0+1\\times 2^{-1}+1\\times 2^{-2}$\n", + "\n", + "$1\\times2^5 + 1\\times2^4 + 1\\times2^3 +0\\times 2^2+0\\times2^1+1\\times 1+\\frac{1}{2}+\\frac{1}{4}$\n", + "\n", + "$32 + 16 + 8 + 0 + 0 + 1 + 0.5 + 0.25$\n", + "\n", + "**Answer**\n", + "> 57.75" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "#1*2**5 + 1*2**4 + 1*2**3 + 0*2**2 + 0*2**1 + 1*2**0 + 1*2**(-1) + 1*2**(-2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "#### Binary Fixed-Point Arithmetic\n", + "| | | | | | | | | |\n", + "|------|------|------|------|------|------|------|------|------|\n", + "| 1 | 1 | 1 | ... | 0 | 0 | ... | 1 | 1 |\n", + "| sign ||$2^{m-1}$ |$2^{m-2}$ | ... |$2^0$ |$2^{-1}$ | ... |$2^{-n+1}$ |$2^{-n}$ |\n", + "\n", + "* Parameters: $m, n \\in Z$\n", + "* $m$ เธเธงเธฒเธกเธขเธฒเธงเธเธญเธเธชเธฒเธข(เธเธณเธเธงเธ bit) เธ—เธตเนเนเธเนเน€เธเนเธเธเธณเธเธงเธเน€เธ•เนเธก(integer portion)\n", + "* $n$ เธเธงเธฒเธกเธขเธฒเธงเธเธญเธเธชเธฒเธข(เธเธณเธเธงเธ bit) เธ—เธตเนเนเธเนเน€เธเนเธเธ•เธฑเธงเธซเธฒเธฃ(fractional portion)\n", + "* เธเธงเธฒเธกเธขเธฒเธงเธ—เธฑเนเธเธซเธกเธ”เธเธญเธเธชเธฒเธขเน€เธเนเธ $m+n+1$ เธฃเธงเธกเธเธฑเธ bit เธ—เธตเนเนเธเนเธเธญเธเน€เธเธฃเธทเนเธญเธเธซเธกเธฒเธข (+/-)\n", + "* เธเธงเธฒเธกเธฃเธนเนเน€เธเธดเนเธกเน€เธ•เธดเธก: [Fixed-Point Numbers](https://en.wikibooks.org/wiki/Floating_Point/Fixed-Point_Numbers)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Error in Binary Fixed-Point Arithmetic\n", + "\n", + "** เธชเธกเธกเธ•เธดเธงเนเธฒเธกเธตเนเธเน 2 bit เนเธซเนเนเธเน ** \n", + "\n", + "> $m = 1, n=1$ เนเธ”เธขเธ—เธตเนเนเธกเนเธเธดเธ” sign bit\n", + "\n", + "$0.1 \\times 0.1 = 0.01 \\approx 0.0$ \n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Binary Floating-Point Arithmetic\n", + "1. IEEE single precision format\n", + "\n", + "| 0 | 1-8 | 9-31 |\n", + "|:----:|:-------------:|:-----------------:|\n", + "| $s$ | $e$ | $f$ |\n", + "| $0$ | $00001001$ | $0011011...01$ |\n", + "\n", + "$ = (-1)^s \\times 2^{e-127} \\times 1.f $\n", + "\n", + "เนเธ”เธขเธ—เธตเน\n", + " * **sign** $s \\in {0, 1}$\n", + " * **biased exponent** $0 \\le e \\le 255$\n", + " * **exponent** $p=e-127$ so $-126 \\le p \\le 127$\n", + " * **significand** $1.f$ " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Binary Floating-Point Arithmetic \n", + "2. IEEE double precision format\n", + "\n", + "| 0 | 1-11 | 12-63 |\n", + "|:----:|:-------------:|:-----------------:|\n", + "| $s$ | $e$ | $f$ |\n", + "| $0$ | $00001000111$ | $0011011...01$ |\n", + "\n", + "$ = (-1)^s \\times 2^{e-1023} \\times 1.f $\n", + "\n", + "เนเธ”เธขเธ—เธตเน\n", + " * **sign** $s \\in {0, 1}$\n", + " * **biased exponent** $0 \\le e \\le 2047$\n", + " * **exponent** $p=e-1023$ so $-1022 \\le p \\le 1024$\n", + " * **significand** $x = 1.f$ " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Example \n", + "\n", + "เธเธเน€เธเธตเธขเธเธเธณเธชเธฑเนเธเน€เธเธทเนเธญเธซเธฒเธเนเธฒเธเธญเธเธ•เธฑเธงเน€เธฅเธเธ•เธฒเธกเธเนเธญเธ•เนเธญเธเธณเธซเธเธ”เธ•เนเธญเนเธเธเธตเน เนเธ”เธขเนเธเน IEEE single precision format\n", + "> 0 1111 0000 0000 1010 0000 0000 0000 000\n", + " \n", + "**Answer** \n", + "เธซเธฒเธเนเธฒ $s, e, f$ เธเธฒเธเนเธเธ—เธขเน\n", + "> $s = 0$\n", + "\n", + "> $e$ = 11110000\n", + "\n", + "> $f$ = 0000101 \n", + "\n", + "```python\n", + "s = 0\n", + "e = int('11110000', 2)\n", + "x = 1 + 0*2**(-1) + 0*2**(-2) + 0*2**(-3) + 0*2**(-4) + 1*2**(-5) + 0*2**(-6) + 1*2**(-7)\n", + "print( (-1)**s * 2**(e-127) * x )\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Exercise \n", + "1. เธเธเน€เธเธตเธขเธเธเธณเธชเธฑเนเธเน€เธเธทเนเธญเธซเธฒเธเนเธฒเธเธญเธเธ•เธฑเธงเน€เธฅเธเธ•เธฒเธกเธเนเธญเธ•เนเธญเธเธณเธซเธเธ”เธ•เนเธญเนเธเธเธตเน เนเธ”เธขเนเธเน IEEE single precision format\n", + " * $s = 0$\n", + " * $e$ = 1111 0000 0000\n", + " * $f$ = 0000 1010 \n", + " \n", + "2. เธเธเน€เธเธตเธขเธเธเธณเธชเธฑเนเธเน€เธเธทเนเธญเธซเธฒเธเนเธฒเธเธญเธเธ•เธฑเธงเน€เธฅเธเธ•เธฒเธกเธเนเธญเธ•เนเธญเธเธณเธซเธเธ”เธ•เนเธญเนเธเธเธตเน เนเธ”เธขเนเธเน IEEE double precision format\n", + " * $s = 1$\n", + " * $e$ = 0000 0011 0000\n", + " * $f$ = 0110 1010 \n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Error Calculation\n", + "\n", + "* **Absolute Error** \n", + " $\\rightarrow E_{abs} = \\| x_0 - x \\|$\n", + "* **Relative Error**\n", + " $\\rightarrow E_{rel} = \\frac { E_{abs} }{x} $\n", + "* **Percentage Error**\n", + " $\\rightarrow E_{per} = E_{rel} \\times 100$" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "celltoolbar": "Slideshow", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/week03/assignment.py b/week03/assignment.py new file mode 100644 index 0000000..3b85884 --- /dev/null +++ b/week03/assignment.py @@ -0,0 +1,12 @@ +def value (v,pos=4,ne=3): + + sign = -1 if v[0]==1 else 1 + return sign*sum([v[i]*2**(pos-i) for i in range(1,(pos+ne)+1)] ) + print( value(v,4,3) ) + + +def values(v, pos, ne): + aa=list(map(int,v)) + sign = -1 if aa[0] == 1 else 1 + return sign * sum([aa[i] * 2 ** (pos - i) for i in range(1, (pos + ne) + 1)]) + diff --git a/week04/__pycache__/assignment.cpython-36.pyc b/week04/__pycache__/assignment.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..868563911f7cd02cb2bdec46665ace3ac91b6856 GIT binary patch literal 801 zcmbtRJxc>Y5S`siVvI&b11bnMHV0lVeqa@Xg|&^HAQH1{JiL!Mdr{O_MbOrt;Xm;= zTw!B%f5Ap)E_$R<5Etg{?C$K_H*dG9)r#|ad-wtXZxs2El<iWO8i4{O?%@!WR2I!b z6%N2Ib_5;q;JHL$QJ8fCRf^$}s+VCX79bW6a4M9g3ist$Dxr!)xko2MQ3K+c*iV@t zrGT80pJ&Pi3bRJgg#jF`+zBQg2qtDx1F=LUHF%O2EJ>z(FD(<;BC)(Mwq+vgjYN2~ z7MIWP?zm@Bpk2Rxvf(s#+^`>LbaoofrhBFJd1Kpc8{>7uK!<U?cl};z`ksk9QP68; z-HmkJtQs%u`uezsx>IlZQK#*j7A4=c=_2d+pkZ5Bq&%@qKS+w$4!hbG$O>^XlR3&O zTr)Ms%9a>@4J6JH=Fa@rY-9pt=A3fW)St~pb|jr5ppLjnTO$7%PK>tlCXu^CF65J} zs}kI-s;GbRi-$PPx2gnR9^wpd%<{&M4vulMqHhQ1Dc>h~>?HCcGk**+|I5uFQhi^y Ia`VfDPteemssI20 literal 0 HcmV?d00001 diff --git a/week04/assignment.py b/week04/assignment.py new file mode 100644 index 0000000..93f5180 --- /dev/null +++ b/week04/assignment.py @@ -0,0 +1,8 @@ +def single_prec(v): + + return (-1)**int(v[0])*sum([int(v[i])*2**(8-i) for i in range(1,23)]) + +def double_prec(v): + + return (-1)**int(v[0])*sum([int(v[i])*2**(11-i) for i in range(1,23)]) + -- 2.18.1