{"metadata": {"name": "", "signature": "sha256:322ca6ccaec8abd30b730118fe05bd1cc631b7bddf3f4cb9f7f4fbb487a8cde1"}, "nbformat": 3, "nbformat_minor": 0, "worksheets": [{"metadata": {}, "cells": [{"metadata": {}, "cell_type": "markdown", "source": ["# Catastrophic Cancellation"]}, {"language": "python", "prompt_number": 2, "outputs": [], "metadata": {}, "cell_type": "code", "collapsed": false, "input": ["import numpy as np"]}, {"metadata": {}, "cell_type": "markdown", "source": ["Let's make two numbers with very similar magnitude:"]}, {"language": "python", "prompt_number": 44, "outputs": [], "metadata": {}, "cell_type": "code", "collapsed": false, "input": ["x = 1.48234\n", "y = 1.48235"]}, {"metadata": {}, "cell_type": "markdown", "source": ["Now let's compute their difference in double precision:"]}, {"language": "python", "prompt_number": 45, "outputs": [{"stream": "stdout", "output_type": "stream", "text": ["-1.0000000000065512e-05\n"]}], "metadata": {}, "cell_type": "code", "collapsed": false, "input": ["x_dbl = np.float64(x)\n", "y_dbl = np.float64(y)\n", "diff_dbl = x_dbl-y_dbl\n", "\n", "print(repr(diff_dbl))"]}, {"metadata": {}, "cell_type": "markdown", "source": ["* What would the correct result be?\n", "* What has happened here?"]}, {"metadata": {}, "cell_type": "markdown", "source": ["-------------\n", "Can you predict what will happen in single precision?"]}, {"language": "python", "prompt_number": 46, "outputs": [{"stream": "stdout", "output_type": "stream", "text": ["-1.00136e-05\n"]}], "metadata": {}, "cell_type": "code", "collapsed": false, "input": ["x_sng = np.float32(x)\n", "y_sng = np.float32(y)\n", "diff_sng = x_sng-y_sng\n", "\n", "print(diff_sng)"]}]}]}