Last active
August 3, 2017 10:42
-
-
Save christianp/40cf6707ec767d17461a25204179519a to your computer and use it in GitHub Desktop.
Find the points where "0.67*x" and "2/3*x" round to the same number to two decimal places, but "0.66*x" rounds to something else.
This file contains 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
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"def p(x):\n", | |
" # return true if 0.67*x and 2/3*x agree to two decimal places, but 0.66*x is something else\n", | |
" a,b,c = ('{0:.2f}'.format(x) for x in (0.67*x,2/3*x,0.66*x))\n", | |
" return a==b and b!=c " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1oAAACPCAYAAADjuaqfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADK5JREFUeJzt3H2sJWddB/Dvb3dpDdhK2y1IqHZplJCSlgJLU43yGqGg\nUsVGi4YWpX+gMYYYoyUETIxEajQioiEEKaCCCBqs0gq1LwFfCt3FvoFAS7VKqZQW+iKlrWUf/zjP\n3Z5u7u3uuX3OnrP3fj7J5M59Zs45M/ObZ858586daq0FAACAcbYsegEAAAA2GkELAABgMEELAABg\nMEELAABgMEELAABgMEELAABgMEELAABgMEELAABgMEELAABgsG2zzLx9+/a2Y8eOOS0KAADActu9\ne/ftrbVj9zffTEFrx44d2bVr1/qXCgAA4BBWVTcfyHxuHQQAABhM0AIAABhM0AIAABhM0AIAABhM\n0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIA\nABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM\n0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIA\nABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM\n0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhM0AIAABhs26IX\nYKPb/Z935I1/c03uue/+VG1JWtKqJS1JWipJ1miv2pK22vyTqUvT3pJUtiTV0g60vbYkeah9xaj2\nLVu25tSnbM9bzjwlW7e6ngBJcuud9+ZX3r8rt931rexpLQ/1mUpVpZLsSUvvUOtvb8meqePE/tr3\nPf6Na8+qx915t2+k4/pMx/s5H9ertkz2uYftu7O229ft6/b1qsq2rVtz+klPyq+/9OlhfgStOTv/\n4i/kc7d9q/+2Z425Zm1fRqPWbVz7Ldfcmp89bUeeefzRa8wDm8uf/tNNueq/7ln0Yhxky3dsOnQs\n2zbayNt6hGXbzofS9l+2bXQwtvWDueCfb85rfuj7cswRh6/j9RwIQWvOfu+nT8rvX/z53HPfA73l\noSsQ6VelZm2fXGU5yO2ZXAwZ2z75pFnbJ1eT6mHte69XTbU/54TtOeV7jwow8boXPTX33v9AvvqN\nb2bPKn2m0tbX3pLacgi2V7KnH1oOtP2hi8LrO36v1e64fmDH9Vnb171Pr9W+LPuufX0J9vW12g+N\nfX3rlspLTnqykDVn1Vrb/1zdzp07265du+a4OAAAAMurqna31nbubz7/vAIAADCYoAUAADCYoAUA\nADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCY\noAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUA\nADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCY\noAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUA\nADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCYoAUAADCY\noAUAADCYoAUAADBYtdYOfOaqryW5eX6Ls2FtT3L7ohdik1OD5aAOi6cGy0EdFk8NFk8NloM6zO74\n1tqx+5tppqDF+lTVrtbazkUvx2amBstBHRZPDZaDOiyeGiyeGiwHdZgftw4CAAAMJmgBAAAMJmgd\nHO9c9AKgBktCHRZPDZaDOiyeGiyeGiwHdZgT/6MFAAAwmL9oAQAADCZoHYCqOr2qvlBVN1bVeatM\nP76qLq2qa6vqiqo6bmra+VV1fR9+Zqr9KVX1qf6eH6yqw3r74f33G/v0HQdjHQ8Fc6rDX/T3vL6q\n3l1Vj+ntz6+qu6rq6j686eCs5XKbUw3eU1X/MbWtT+ntVVVv6591bVU96+Cs5XKbUw0+ObX9v1JV\nH+nt+sEq+rHitqq6fo3pa+67VXVOVd3Qh3Om2p9dVdf117ytqqq3H11Vl/T5L6mqo+a/hoeG0XWo\nqsdW1Uer6vNV9dmqesvU/K+uqq9N9YVz57+Gy29OfeGKfoxb2dZP6O3Oj9Ywh75wxNT2v7qqbq+q\nt/Zp+sIsWmuGRxiSbE3ypSQnJDksyTVJTtxnng8lOaePvzDJn/XxH01ySZJtSR6X5KokR/Zpf5Xk\nrD7+jiS/2Md/Kck7+vhZST646G2wDMMc6/CyJNWHD0zV4flJ/n7R671Mwxxr8J4kZ67yeS9LcnGv\nzWlJPrXobbDoYV412Of1f53k7D6uH6xeh+cmeVaS69eYvuq+m+ToJDf1n0f18aP6tE/3eau/9qW9\n/XeTnNfHz0ty/qLXf1mG0XVI8tgkL+jzHJbkk1N1eHWSty96nZdtmFNfuCLJzlXey/nRQazDPq/f\nneS5fVxfmGHwF639OzXJja21m1prDyT5yyRn7DPPiUku6+OXT00/McknWmsPtta+meTaJKf3K5Uv\nTPLhPt97k/xEHz+j/54+/UUrVzY3ueF1SJLW2kWty+RE57iwlrnU4BGckeR9vTxXJnl8VT1pxIoc\nwuZag6o6MpNj00fmtPwbQmvtE0m+/gizrLXvviTJJa21r7fWvpFJ8D29TzuytXZlPxa9L6t/J0x/\nV2x6o+vQWru3tXZ5f+8HknwmvhMe0ega7OfjnB+tYZ51qKqnJnlCJhcemJGgtX9PTvLfU79/ubdN\nuybJK/r4TyY5oqqO6e2n99sRtid5QZLvSXJMkjtbaw+u8p57P69Pv6vPv9nNow571eSWwVcl+Yep\n5h+oqmuq6uKqevq4VTlkzbMGb+63M/xBVR0+w+dtNnPtB5mcxF/aWrt7qk0/mN1adXqk9i+v0p4k\nT2yt3drH/yfJE+exwBvUrHXYq6oen+THk1w61fxT/Tj14arat++wuvXW4IJ+W9obp8KU86P1W3df\nyEN/PZx+ep6+cIAErTF+LcnzqurfkjwvyS1Jvt1a+3iSi5L8Sya3pf1rkm8vbCk3vkdThz/J5Gr/\nyhWbzyQ5vrX2jCR/FFf4D9R6avD6JE9L8pxMbl/4jYO90BvMo+kHr+zTVugHS6Sf6HhU8JxV1bZM\n+sHbWms39ea/S7KjtXZyJlf937vW63nUfq61dlKSH+7Dqxa8PJvdWXn494K+MANBa/9uycOv+h7X\n2/ZqrX2ltfaK1tozk7yht93Zf765tXZKa+1HMrk39otJ7sjkz7bbVnnPvZ/Xp39Xn3+zm0cdkiRV\n9ZtJjk3yq1PvdXdr7X/7+EVJHtP/CrCZzaUGrbVb++0M9ye5IJPb4w7o8zahefaD7Zls+49OvZd+\nsD5r1emR2o9bpT1Jvrpyy2z/educlnkjmrUOK96Z5IbW2ltXGlprd/RjVJK8K8mz57LEG8/MNWit\nrfy8J8n7s8p3gvOjma2rL1TVM5Jsa63tXmnTF2YjaO3fVUm+vyZPCTwsk2R/4fQMVbW9qla25euT\nvLu3b+237KSqTk5ycpKP96uSlyc5s7/mnCR/28cv7L+nT79snz/XblbD69B/PzeTe5Rf2VrbM/Ve\n371yu0JVnZpJX9nsB/R51WDlJLIyuXVt5alJFyY5uz8t6bQkd03dQrVZzaUG3ZmZPPjivqn30g/W\nZ61992NJXlxVR9Xk6YEvTvKxPu3uqjqtb++zs/p3wvR3Bfs3Ux2SpKp+O5MT+NdNv9E+/x/68iT/\nfjBWYAOYqQZVtW3lYk6/pf/H8vDvBOdH6zNzX+j2vctBX5hVW4Inciz7kMnTWr6YydO+3tDbfivJ\ny/v4mUlu6PO8K8nhvf07knyuD1cmOWXqPU/I5OELN2bylLDp13yot386yQmLXv9lGeZUhwf7+13d\nhzf19l9O8tlM/q/lyiQ/uOj1X4ZhTjW4LMl1mXyZ/nmS7+ztleSP+2ddl1WeQrUZh3nUoE+/IpMH\nAky36Qer1+ADSW5N8n+Z/E/Da5K8Nslr+/Q1990kv9CP7zcm+fmp9p29D3wpyduTVG8/JpP/E7oh\nyT8mOXrR678sw+g6ZHI1v2Vy4rjynXBun/Y7U33h8iRPW/T6L8Mwhxo8LpMn3F3bt/cfJtnapzk/\nOkh1mJp20777ur4w27ByIAcAAGAQtw4CAAAMJmgBAAAMJmgBAAAMJmgBAAAMJmgBAAAMJmgBAAAM\nJmgBAAAMJmgBAAAM9v92wAcfVVQZnAAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x4d82c30>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"fig, ax = plt.subplots(figsize=(15,2))\n", | |
"ax.get_yaxis().set_visible(False)\n", | |
"n = 10000\n", | |
"a,b = 0.99,1.01\n", | |
"xs = [x for x in [(b-a)*x/n+a for x in range(0,n) ] if p(x)]\n", | |
"ys = [1]*len(xs)\n", | |
"scale = 1\n", | |
"ax.scatter(xs, ys, s=3, alpha=0.3, edgecolors='none')\n", | |
"\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"!\t0.9901062107116154\t0.66 0.66 0.65\n", | |
"!\t0.9902250528576588\t0.66 0.66 0.65\n", | |
"!\t0.9921171875953435\t0.66 0.66 0.65\n", | |
"!\t0.9922815901840906\t0.66 0.66 0.65\n", | |
" \t0.9927286010078373\t0.67 0.66 0.66\n", | |
" \t0.9928939794367649\t0.67 0.66 0.66\n", | |
" \t0.9932649410400956\t0.67 0.66 0.66\n", | |
" \t0.9932761604262923\t0.67 0.66 0.66\n", | |
" \t0.9932876920090452\t0.67 0.66 0.66\n", | |
" \t0.9937114766215758\t0.67 0.66 0.66\n", | |
" \t0.9940599540959716\t0.67 0.66 0.66\n", | |
" \t0.9942284568151343\t0.67 0.66 0.66\n", | |
" \t0.9943239672938083\t0.67 0.66 0.66\n", | |
" \t0.9950924073921029\t0.67 0.66 0.66\n", | |
" \t0.9955175363390599\t0.67 0.66 0.66\n", | |
" \t0.9955865260534439\t0.67 0.66 0.66\n", | |
" \t0.9963359706603602\t0.67 0.66 0.66\n", | |
" \t0.9963559785252695\t0.67 0.66 0.66\n", | |
" \t0.9970240590848033\t0.67 0.66 0.66\n", | |
" \t0.9971207139644296\t0.67 0.66 0.66\n", | |
" \t0.9972273506871502\t0.67 0.66 0.66\n", | |
" \t0.9973565046248328\t0.67 0.66 0.66\n", | |
" \t0.9974421300307009\t0.67 0.66 0.66\n", | |
"!\t0.9978831886852849\t0.67 0.67 0.66\n", | |
"!\t0.997984310277999\t0.67 0.67 0.66\n", | |
"!\t0.998112630715233\t0.67 0.67 0.66\n", | |
"!\t0.9987364532763212\t0.67 0.67 0.66\n", | |
"!\t0.9998168768844163\t0.67 0.67 0.66\n", | |
"!\t0.9998773948351627\t0.67 0.67 0.66\n", | |
"!\t0.9999932278336782\t0.67 0.67 0.66\n", | |
"!\t1.0000340580783924\t0.67 0.67 0.66\n", | |
"!\t1.0001875354527374\t0.67 0.67 0.66\n", | |
"!\t1.0005713130813718\t0.67 0.67 0.66\n", | |
"!\t1.0008307809690682\t0.67 0.67 0.66\n", | |
"!\t1.0011398036620764\t0.67 0.67 0.66\n", | |
"!\t1.0012416307811904\t0.67 0.67 0.66\n", | |
"!\t1.0016001488337687\t0.67 0.67 0.66\n", | |
"!\t1.0019658079764182\t0.67 0.67 0.66\n", | |
"!\t1.0026370427137192\t0.67 0.67 0.66\n", | |
"!\t1.002922822783715\t0.67 0.67 0.66\n", | |
"!\t1.0032375320806453\t0.67 0.67 0.66\n", | |
"!\t1.004058759281178\t0.67 0.67 0.66\n", | |
"!\t1.0041101107969819\t0.67 0.67 0.66\n", | |
"!\t1.0049996600704119\t0.67 0.67 0.66\n", | |
"!\t1.005791398684193\t0.67 0.67 0.66\n", | |
"!\t1.0060714805739277\t0.67 0.67 0.66\n", | |
"!\t1.0064446570908008\t0.67 0.67 0.66\n", | |
" \t1.0077372827203597\t0.68 0.67 0.67\n", | |
" \t1.0085120539418937\t0.68 0.67 0.67\n", | |
" \t1.009873098014959\t0.68 0.67 0.67\n" | |
] | |
} | |
], | |
"source": [ | |
"from random import random\n", | |
"xs = [(b-a)*random()+a for x in range(50)]\n", | |
"xs.sort()\n", | |
"print('\\n'.join(['{}\\t{}\\t{}'.format('!' if p(x) else ' ', x,' '.join('{0:.2f}'.format(x) for x in (0.67*x,2/3*x,0.66*x))) for x in xs]))" | |
] | |
} | |
], | |
"metadata": { | |
"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.0" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment