Make Truncation be Rounding |
May 22nd, 2016 |
ideas, math [html] |
When I see a number like "183" the first thing I see is a "1". If I'm
looking very quickly, perhaps scanning a column of numbers, that might
be all I see, and I'll approximate this number as "100" when "200"
would be closer. Yes, truncation isn't the same thing as rounding,
but wouldn't things be a lot easier if it were? Let's make it be that
way.
To interpret a number today, you multiply each column by the size it represents and add them up:
number | 100s | 10s | 1s | sum |
---|---|---|---|---|
100 | 1 | 0 | 0 | 1*100 + 0*10 + 0*1 |
120 | 1 | 2 | 0 | 1*100 + 2*10 + 0*1 |
121 | 1 | 2 | 1 | 1*100 + 2*10 + 1*1 |
129 | 1 | 2 | 9 | 1*100 + 2*10 + 9*1 |
125 | 1 | 2 | 5 | 1*100 + 2*10 + 5*1 |
With this new system, we still do this, but in each column our available options range from -5 to 4 instead of 0 to 9.
number | 100s | 10s | 1s | sum |
---|---|---|---|---|
100 | 1 | 0 | 0 | 1*100 + 0*10 + 0*1 |
120 | 1 | 2 | 0 | 1*100 + 2*10 + 0*1 |
121 | 1 | 2 | 1 | 1*100 + 2*10 + 1*1 |
129 | 1 | 3 | -1 | 1*100 + 3*10 + ^{-}1*1 |
125 | 1 | 3 | -5 | 1*100 + 3*10 + ^{-}5*1 |
Here are a few more examples:
old notation | new notation |
---|---|
0 | 0 |
4 | 4 |
7 | 1^{-}3 |
579 | 1^{-}4^{-}2^{-}1 |
432 | 432 |
1999 | 200^{-}1 |
And here's a program to calculate these:
def to_new_notation(x): digits = [] carry = False for digit in reversed([ int(x) for x in str(x)]): if carry: digit += 1 carry = False if digit >= 5: digit -= 10 carry = True digits.append(digit) if carry: digits.append(1) digits.reverse() return digits
Update 2016-05-25: Truncation isn't actually rounding in this system unless you allow both 5 and ^{-}5 as digits. Thanks to Marius for pointing this out.
Comment via: google plus, facebook