Soroban ------- The Japanese abacus (Soroban) consists of an upper and lower deck, each housing a number of columns of beads. ... ───┬───┬───┬───┐ O O O │ <- "upper deck" │ │ │ │ ... ───┼───┼───┼───┤ <- "beam". │ │ │ │ O O O │ <- "lower deck" O O O │ O O O <-│--- "columns of beads" O O O │ ... ───┴───┴───┴───┘ Beads in the lower deck represent 1 and those in the upper deck, 5. Numbers are counted by moving beads _towards_ the central beam, so the picture above re- presents ...000. Here are some more numbers. Above each abacus is the decimal equivalent of its bead arrangement. 1 2 3 4 5 6 7 8 9 ... ───┬───┬───┬───┐ ... ───┬───┬───┬───┐ ... ───┬───┬───┬───┐ O O O │ O │ │ │ │ │ │ │ │ │ │ │ │ O O │ O O O │ ... ───┼───┼───┼───┤ ... ───┼───┼───┼───┤ ... ───┼───┼───┼───┤ O O O │ O │ O │ O O O │ │ O O │ O O │ │ O O O │ O │ O │ O O O │ │ O O │ O O │ │ O O O │ O │ O │ O O O │ │ O O │ O O │ │ ... ───┴───┴───┴───┘ ... ───┴───┴───┴───┘ ... ───┴───┴───┴───┘ 0/1.0/2.0/3 0/4.1/0.1/1 1/2.1/3.1/4 The expression at the base of each soroban corresponds to the bead positions in the columns above. Characters 0-4 show the number of beads moved towards the central beam '/' and adjacent columns are separated by '.'. We will use this symbolic representation from here on. Auxiliary functions ⍺ and ⍵ in the script convert between these ⍺bacus and ⍵estern number representations. Whole decimal numbers are represented with a '.' separator between each digit; this is not a decimal point (see →Overview←). ⍺ 3.7.4 ⍝ ⍺bacus from ⍵estern number 374. 0/3.1/2.0/4 ⍵ 0/3.1/2.0/4 ⍝ ⍵estern from ⍺bacus. 3.7.4 Addition is performed with reference to the following small table: ┌───┬───┬───┬───┐ + │ 1 │ 2 │ 3 │ 4 │ ┌───┼───┼───┼───┼───┤ │i/0│i/1│i/2│i/3│i/4│ Where: + = i+1 ├───┼───┼───┼───┼───┤ │i/1│i/2│i/3│i/4│+/0│ Addends of 5 and above are recast: ├───┼───┼───┼───┼───┤ │i/2│i/3│i/4│+/0│+/1│ i/n + (5+j) => (i+1)/n + j ├───┼───┼───┼───┼───┤ │i/3│i/4│+/0│+/1│+/2│ If i=1, then (i+1) carries to the next column: ├───┼───┼───┼───┼───┤ │i/4│+/0│+/1│+/2│+/3│ i/m . (1+1)/n => i/(m+1) . 0/n └───┴───┴───┴───┴───┘ Similarly, subtraction is performed with reference to: ┌───┬───┬───┬───┐ - │ 1 │ 2 │ 3 │ 4 │ ┌───┼───┼───┼───┼───┤ │i/0│-/4│-/3│-/2│-/1│ Where: - = i-1 ├───┼───┼───┼───┼───┤ │i/1│i/0│-/4│-/3│-/2│ Subtrahends of 5 and above are recast: ├───┼───┼───┼───┼───┤ │i/2│i/1│i/0│-/4│-/3│ i/n - (5+j) => (i-1)/n - j ├───┼───┼───┼───┼───┤ │i/3│i/2│i/1│i/0│-/4│ If i=0, then (i-1) carries to the next column: ├───┼───┼───┼───┼───┤ │i/4│i/3│i/2│i/1│i/0│ i/m . (0-1)/n => i/(m-1) . 1/n └───┴───┴───┴───┴───┘ ( The Chinese abacus, or "Suan-Pan", has an extra bead in both the upper and lower deck: ... ───┬───┬───┬───┐ O O O │ O O O │ <- 2 beads/column in upper deck, │ │ │ │ ... ───┼───┼───┼───┤ │ │ │ │ O O O │ O O O │ O O O │ <- 5 beads/column in lower deck. O O O │ O O O │ ... ───┴───┴───┴───┘ For decimal calculations, the outermost beads are not used, except to defer an overflow-carry operation if desired. The prime purpose of the extra beads is to provide a total of 3 × 6 = 18 combinations, allowing the possibility of hexadecimal arithmetic in calculating weights (1 Jin = 16 Liang). The Japanese Soroban evolved from the Chinese Suan Pan by losing a bead from its upper deck in the middle of the 19th century and one from its lower deck in the middle of the 20th. ) ( As the Pre-Columbian people of Central America used their toes as well as their fingers for counting, they wound up with a base 20 number system. The digits were written in columns, each expressed as a series of up to 5 marks arranged in up to 4 rows (fingers/toes per hand/foot). See: dfns.dws/notes.mayan for further details. The 4×5 arrangement of marks suggests an abacus with 3 beads in the upper, and 4 in the lower deck, giving 4×5 combinations. The Mesoamerican abacus appears to have been invented independently of the Chinese abacus (just as their invention of the Zero appears to be independent of the Arab Zero). ... ───┬───┬───┬───┐ O O O │ O O O │ <- 3 beads/column in upper deck, O O O │ │ │ │ │ ... ───┼───┼───┼───┤ │ │ │ │ O O O │ O O O │ <- 4 beads/column in lower deck. O O O │ O O O │ ... ───┴───┴───┴───┘ An example "Nepohualtzitzin" dates from 900-1000 AD. It was made from maize- kernel beads threaded on strings with a fixed central "beam" bead separating the upper and lower floating ones. Nepohualtzitzin was worn on the forearm as a nifty fashion accessory. (It would be interesting to find how ownership of such abaci was spread within mesoamerican society; perhaps the average market trader sported one, or perhaps they were the exclusive preserve of the Astronomer-Priest. Given that the device itself looks relatively inexp- ensive to manufacture, this would say more about the general grasp or avail- ability of arithmetic within the community, than about the distribution of wealth needed to own such a beautiful calculator - JMS). Ref: Ifrah, G. "The Universal History of Numbers". ) ( A common feature of all of these abaci is that they respect the limit of the number of objects or states that the human recognition system can grasp im- mediately without explicitly having to count them. This limit seems to be around 4. Just for fun and given this constraint, here is a proposal for an abacus for a base 60 (sexagesimal) number system, as used by the Babylonians and Sumer- ians. ... ───┬───┬───┬───┐ │ │ │ │ O O O │ <- 2 beads/column in upper deck, O O O │ ... ───┼───┼───┼───┤ │ │ │ │ O O O │ O O O │ <- 3 beads/column in middle deck, O O O │ ... ───┼───┼───┼───┤ │ │ │ │ O O O │ O O O │ <- 4 beads/column in lower deck. O O O │ O O O │ ... ───┴───┴───┴───┘ We would see something like: ⍺ 12.34.56 0/2/2.1/2/4.2/3/1 Here is a function to translate a decimal number into "abacus format": enco←{ ⍝ Encode to ⍺-abacus. ⍺←2 5 ⍝ default to soroban. cols←⌈(×/⍺)⍟⍵ ⍝ number of columns to use. base←cols/×/⍺ ⍝ encoding base. digs←⍺⊤base⊤⍵ ⍝ digits in each column, in each deck. nums←⍕¨¨↓⍉digs ⍝ formatted digits per deck, per column. join←{↑⍺{⍺,⍺⍺,⍵}/⍵} ⍝ ⍺-join function. '.'join'/'join¨nums ⍝ collected abacus representation. } enco 23 ⍝ encode to soroban. 0/2.0/3 enco 87 1/3.1/2 For the base-60 "triple-decker" above, we bind a left argument of 3 4 5: tridek←3 4 5∘enco tridek 20 1/0/0 tridek 83 0/0/1.1/0/3 tridek 60⊥12 34 56 0/2/2.1/2/4.2/3/1 ) Examples: soroban script until'→' ⍺ 1.2.3 ⍝ abacus representation of decimal 123. 0/1.0/2.0/3 ⍺ 4.5.6 ⍝ ditto 456. 0/4.1/0.1/1 0/0 + 1.2.3 ⍝ addition into cleared abacus. 0/1.0/2.0/3 ⍵ 0/0 + 1.2.3 ⍝ ... reinterpreted into (⍵estern) decimal. 1.2.3 ⍵ 0/0 + 1.2.3 + 4.5.6 ⍝ sequence of additions. 5.7.9 ⍵ (⍺ 3.5) - 7 ⍝ succession of subtractions of 7 ... 2.8 ⍵ (⍺ 3.5) - 7 - 7 2.1 ⍵ (⍺ 3.5) - 7 - 7 - 7 1.4 → ⍝ etc. soroban trace eval'⍵ 0/0 + 9.9.9 + 1' ⍝ traced additions. ···0/0+9.9.9 [h/e+q.d → (0/0+q).(h/e+d)] (0/0+9.9).(0/0+9) ····0/0+9.9 [h/e+q.d → (0/0+q).(h/e+d)] (0/0+9).(0/0+9) ·····0/0+9 [h/e+d → (h+1)/e+⌊d] (0+1)/0+⌊9 ······(0+1)/0 [(0+1)/e → 1/e] 1/0 ······⌊9 [⌊9 → 4] 4 ·····1/0+4 [h/0+e → h/e] 1/4 ·····0/0+9 [h/e+d → (h+1)/e+⌊d] (0+1)/0+⌊9 ······(0+1)/0 [(0+1)/e → 1/e] 1/0 ······⌊9 [⌊9 → 4] 4 ·····1/0+4 [h/0+e → h/e] 1/4 ····0/0+9 [h/e+d → (h+1)/e+⌊d] (0+1)/0+⌊9 ·····(0+1)/0 [(0+1)/e → 1/e] 1/0 ·····⌊9 [⌊9 → 4] 4 ····1/0+4 [h/0+e → h/e] 1/4 ··1/4.1/4.1/4+1 [p.h/e+d → p.(h/e+d)] 1/4.1/4.(1/4+1) ···1/4+1 [h/4+1 → (h+1)/0] (1+1)/0 ···(1+1)/0 [(1+1)/e → 0/1.0/e] 0/1.0/0 ··1/4.1/4.(0/1.0/0) [p.(0/1.q) → (p+1).q] (1/4.1/4+1).0/0 ···1/4.1/4+1 [p.h/e+d → p.(h/e+d)] 1/4.(1/4+1) ····1/4+1 [h/4+1 → (h+1)/0] (1+1)/0 ····(1+1)/0 [(1+1)/e → 0/1.0/e] 0/1.0/0 ···1/4.(0/1.0/0) [p.(0/1.q) → (p+1).q] (1/4+1).0/0 ····1/4+1 [h/4+1 → (h+1)/0] (1+1)/0 ····(1+1)/0 [(1+1)/e → 0/1.0/e] 0/1.0/0 ·⍵0/1.0/0.0/0.0/0 [⍵p.q → (⍵p).⍵q] (⍵0/1.0/0.0/0).⍵0/0 ··⍵0/1.0/0.0/0 [⍵p.q → (⍵p).⍵q] (⍵0/1.0/0).⍵0/0 ···⍵0/1.0/0 [⍵p.q → (⍵p).⍵q] (⍵0/1).⍵0/0 ····⍵0/1 [⍵0/e → e] 1 ····⍵0/0 [⍵0/e → e] 0 ···⍵0/0 [⍵0/e → e] 0 ··⍵0/0 [⍵0/e → e] 0 1.0.0.0 References: http://werwolf.ee.ryerson.ca:8080/~elf/abacus http://www.soroban.com/link_eng.html http://members.aol.com/chineseabacus See also: →#.soroban←