Make Truncation be Rounding |
May 22nd, 2016 |
| ideas, math |
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, substack