Skip to content

Instantly share code, notes, and snippets.

@christianp
Last active August 3, 2017 10:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save christianp/40cf6707ec767d17461a25204179519a to your computer and use it in GitHub Desktop.
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.
Display the source blob
Display the rendered blob
Raw
{
"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