Zero is a Dangerous Idea

Zero: The Biography of a Dangerous Idea. Charles Seife traces the origins and colorful history of the number zero from Aristotle to superstring theory by way of Pythagoras, the Kabbalists, and Einstein. Weaving together ancient dramas and state-of-the-art science, Zero is a concise tour of a universe of ideas bound up in the simple notion of nothingness.  author

https://open.live.bbc.co.uk/mediaselector/6/redir/version/2.0/mediaset/audio-nondrm-download/proto/https/vpid/p02q5xwz.mp3 BBC's In Our Time program titled Zero. Melvyn Bragg and guests discuss the history of the number between 1 and -1, which has strange and uniquely beguiling qualities. bbc [https://open.live.bbc.co.uk/mediaselector/6/redir/version/2.0/mediaset/audio-nondrm-download/proto/https/vpid/p02q5xwz.mp3 mp3]

.

To illustrate the paradigm shift of place-based notation and the humble zero, consider the addition of two small numbers.

//wiki.dbbs.co/assets/pages/js-snippet-template/esm.html HEIGHT 50

.

Once upon a time, a very long time ago, long division was the subject of doctoral dissertations. Today long division is taught in elementary school. What changed between those eras was the introduction of hindu-arabic numerals. See "Powerful ideas and powerful tools for education" blog

(Eric Dobbs in 2015 in a couple tweets): Papert gave us turtle geometry in 1967. That is, made differential geometry appropriate for elementary school. It's as if someone offered us a zero and we collectively said, "No thanks. I'll keep teaching division with roman numerals."

.

We generate two random numbers, 3 digits or less. Then we format the addition problem in adjacent columns for easy comparison.

export async function emit(el) { const digital = [ Math.floor(Math.random()*1000), Math.floor(Math.random()*1000) ]; digital.push(digital[0] + digital[1]); const roman = digital.map(digits2roman); const leftpad = d => ` ${d}`.substr(-4); el.innerHTML = `<pre> ${leftpad(digital[0])} ${roman[0]} + ${leftpad(digital[1])} + ${roman[1]} ---- -------- ${leftpad(digital[2])} ${roman[2]} </pre>`; }

Thirteen steps to convert base10 to roman numerals.

function digits2roman(digits) { let roman = ''; for (let {amount, letters} of [ {amount: 1000, letters: "M"}, {amount: 900, letters: "CM"}, {amount: 500, letters: "D"}, {amount: 400, letters: "CD"}, {amount: 100, letters: "C"}, {amount: 90, letters: "XC"}, {amount: 50, letters: "L"}, {amount: 40, letters: "XL"}, {amount: 10, letters: "X"}, {amount: 9, letters: "IX"}, {amount: 5, letters: "V"}, {amount: 4, letters: "IV"}, {amount: 1, letters: "I"} ]) { let q = Math.floor(digits / amount); digits -= q * amount; roman += letters.repeat(q); } return roman; }

Altered slightly from stackoverflow .