## Introduction

Obtaining square and cubic roots are the most complex operations studied within Elemental Arithmetic. The eastern abacus is very well adapted to obtaining square roots by a direct and efficient procedure, but unfortunately the same cannot be said with reference to cube roots which, although possible, require a tortuous path full of comings and goings that it is prone to errors.

Cargill Gilston Knott (1856 - 1922), one of the fathers of modern seismology, was a Scottish physicist and mathematician who served nine years as a professor of mathematics, acoustics and electromagnetism at the Imperial University of Tokyo; after which he was awarded the Order of the Rising Sun by Emperor Meiji in 1891. During his stay in Japan he came into contact with the Japanese abacus which he studied in depth and without a doubt he used professionally in his own work as a teacher and researcher. The result of this study was a famous 55 pages article[1] written in 1885 about it, which for a long time has been the best informed account in English, and obligatory reference, on the history and foundations of soroban. The next two chapters in this book develop and expand on Knott's vision of the traditional methods of obtaining square and cube roots, the vision of a western scientist and mathematician, offering both a theoretical and practical approach illustrated with several examples.

## Chapters

This part of the book consists of the following chapters:

Obtaining square and cubic roots with the abacus can be a somewhat long process and during the learning phase it is interesting to have a tool that allows us to control whether we are doing it correctly.

### Square root

For square roots you can try the excellent Murakami's Square root tutor with Kijoho, a JavaScript application that you can run directly in your browser or download to your computer from its GitHub repository. You just have to enter the root in the small input box on the left and repeatedly press the "next" button on the screen to see the development of the process step by step.

### Cube root

#### File knott.bc

And mainly for cube roots, the following BC code may help, copy and paste it to a text file and call it knott.bc:

```/*
Functions to help to learn/verify square and cube roots a la Knott
with the abacus, soroban, suanpan.

See: https://jccabacus.blogspot.com/2021/06/roots-la-knott.html
as a reference.

Jesús Cabrera, June 2021
CC0 1.0 Universal (CC0 1.0) Public Domain Dedication

*/

define int(x)
{

# Integer part of x

auto os,r
os=scale; scale=0
r=x/1
scale= os
return (r)
}

define cbrt(x)
{

# Cube root of x

return (e(l(x)/3))
}

define knott2(r0, y0, alpha)
{

/*
Square root following Cargill G. Knott steps

See example of use in file sr200703.bc
use: \$ sr200703.bc |bc -l knott.bc
*/
auto so, div

so = scale; /* Store old scale value */
scale = 1

a = 10*y0
div = 100*r0 + alpha/2
print "New dividend: ",div/1,"\n"
b = int(div/(a))
tf = div -b*a -b^2/2
if (tf<0){
b=b-1;print "Revising down, b = ",b, "\n"
tf = div -b*a -b^2/2
}
print "New root: ", a+b,", New half-remainder: ", tf/1
print "\n==================\n\n"
scale = so; /* restore old scale value */

return
}

define knott3(r0, y0, alpha)
{

/*
Cube root following Cargill G. Knott steps

See example of use in file cr488931400152.bc
use: \$ cat cr488931400152.bc |bc -l knott.bc

*/
auto so, div, ta, tb, tc, td, te

so = scale; /* Store old scale value */
scale = 0

a = 10*y0
div = 1000*r0 + alpha
print "New dividend: ",div,"\n\n"

ta = div/y0; rem1 = div % y0
print "a) /a:   ", ta, "   rem1: ", rem1, "\n"
tb = (10*ta)/3; rem2 = (10*ta) % 3
print "b) /3:   ", tb, "   rem2: ", rem2, "\n"
b = tb/(100*a)
print "     b = ",b,"\n"
tc = tb - b*(a+b)*100
print "d)   :   ",tc,"\n"
b = tb/(100*(a+b))
print "     b = ",b,"\n"
tc = tb - b*(a+b)*100
print "d)   :   ",tc,"\n"
if(b==10){
/* Trick to avoid some problems */
b = 9
print "b: ",b,"\n"
tc = tb - b*(a+b)*100
print "d) tc:   ",tc,"\n"
}
td = tc*3 +rem2
print "e) *3:   ",td,"\n"
te = (td/10)*y0 +rem1
print "f) *a:   ",te,"\n"
tf = te - b^3
print "g) -b^3: ",tf,"\n"
print "\nNew root: ",(a+b)," New remainder: ",tf,"\n\n"
print "==================\n\n"
scale = so; /* restore old scale value */

return
}
```

#### File: sr200703.bc

```/*
Example: square root of 200703

Use:
\$ cat sr200703.bc |bc -l knott.bc
or
\$ bc -l knott.bc < sr200703.bc
*/

print "\nSquare root of ", 200703, " = ", sqrt(200703), "\n\n"

/*
Decompose in pairs of digits (will be alpha): 20, 07, 03

Initialize (first step)
*/
alpha = 20
b = int(sqrt(alpha))
r0 = alpha - b^2
a = 0
tf = r0/2
print "First root: ", b, ", First half-remainder: ", tf, "\n"
print "==================\n\n"

/*
Main:
Repeat for each pair of digits (alpha)...
*/

alpha =07
mute=knott2(tf, a+b, alpha)
alpha =03
mute=knott2(tf, a+b, alpha)
/*
For additional digits continue with alpha = 00
*/
alpha =00
mute=knott2(tf, a+b, alpha)
alpha =00
mute=knott2(tf, a+b, alpha)
alpha =00
mute=knott2(tf, a+b, alpha)
alpha =00
mute=knott2(tf, a+b, alpha)
```

Output:

```Square root of 200703 = 447.99888392718122931160

First root: 4, First half-remainder: 2.00000000000000000000
==================

New dividend: 203.5
Revising down, b = 4
New root: 44, New half-remainder: 35.5
==================

New dividend: 3551.5
Revising down, b = 7
New root: 447, New half-remainder: 447.0
==================

New dividend: 44700.0
Revising down, b = 9
New root: 4479, New half-remainder: 4429.5
==================

New dividend: 442950.0
New root: 44799, New half-remainder: 39799.5
==================

New dividend: 3979950.0
New root: 447998, New half-remainder: 395998.0
==================

New dividend: 39599800.0
New root: 4479988, New half-remainder: 3759928.0
==================
```

#### File cr488931400152.bc

```/*
Example: cube root of 488931400152

Use:
\$ cat cr488931400152.bc |bc -l knott.bc
or
\$ bc -l knott.bc < cr488931400152.bc
*/

print "\nCube root of ", 488931400152, " = ", cbrt(488931400152), "\n\n"

/*
Decompose in triplets (will be alpha): #   488, 931, 400, 152

Initialize (first step)
*/

alpha = 488
b = int(cbrt(alpha))
r0 = alpha - b^3
a = 0
tf = r0
print "First root: ", b, ", First remainder: ", r0, "\n"
print "==================\n\n"

/*
Main:
Repeat for each triplet (alpha)...
*/

alpha = 931
mute = knott3(tf, a+b, alpha)
alpha = 400
mute = knott3(tf, a+b, alpha)
alpha = 152
mute = knott3(tf, a+b, alpha)

/*
For additional digits continue with alpha = 000
*/
```

Output

```Cube root of 488931400152 = 7877.99999999999999999871

First root: 7, First remainder: 145
==================

New dividend: 145931

a) /a:   20847   rem1: 2
b) /3:   69490   rem2: 0
b = 9
d)   :   -1610
b = 8
d)   :   7090
e) *3:   21270
f) *a:   14891
g) -b^3: 14379

New root: 78 New remainder: 14379

==================

New dividend: 14379400

a) /a:   184351   rem1: 22
b) /3:   614503   rem2: 1
b = 7
d)   :   63603
b = 7
d)   :   63603
e) *3:   190810
f) *a:   1488340
g) -b^3: 1487997

New root: 787 New remainder: 1487997

==================

New dividend: 1487997152

a) /a:   1890720   rem1: 512
b) /3:   6302400   rem2: 0
b = 8
d)   :   0
b = 8
d)   :   0
e) *3:   0
f) *a:   512
g) -b^3: 0

New root: 7878 New remainder: 0

==================
```

## References

1. Knott, Cargill G. (1886), "The Abacus, in its Historic and Scientific Aspects", Transactions of the Asiatic Society of Japan, 14: 18–73

Next Page: Roots/Square root | Previous Page: Multiplication