纳皮尔的骨头

纳皮尔的骨头（Napier's bones）是苏格兰数学家约翰纳皮尔发明的一种用来计算乘法与除法，类似算盘的工具。由一个底座及九根圆柱（方柱）组成，可以把乘法运算转为加法，也可以把除法运算转为减法。更为进阶的用法也可以开平方根

<image>

纳皮尔的骨头在清初传入中国，数学家梅文鼎在《梅氏丛书辑要》中最先介绍纳皮尔的骨头，梅氏称之为“筹算”。后来戴震著作《策算》也叙述了这种算法。

<image>

## 简介

底座左边的数字由上而下是1-9。先将之称为n。

每根圆柱又分为十格，下面九格有自左下而右上的斜线。最上面的格子写着1-9的数字，姑且称为k，代表着这根柱子的编号。编号下面的数字则是由k乘上横排相对应的n得到的，十位数摆左上角，个位数摆右下角。

### 乘法运算

举例说明如何用纳皮尔的骨头进行乘法运算。

46785399乘以7

1.把编号4,6, 7,8, 5,3, 9,9的圆柱依序放入底座。

2.如下图将结果相加即得到乘积（记得要进位）。

<image>

46785399乘以96431

1.把编号4,6, 7,8, 5,3, 9,9的圆柱依序放入底座。

2.将46785399乘以9,6, 4,3, 1分别用上述方法一条一条算出来。

3.接着用直式加法把数字加起来。

<image>

### 除法运算

同样举例说明。

46785399除以96431

1.把除数（96431）编号的柱子摆入底座。

2.如下图所示把96431乘以1-9的结果写出来。

- 46785399从左边六位开始看，下面写上小于467853但最大的96431k。

4.用467853去减96431k（此例中k=4），得到的数字写下面。

5.把上面的数字（9）移下来，如同长除法般重复进行此动作。

6.最后得到一个比96431还小的数，为余数。

7.如有需要，可以一直进行除法工作以得到小数点位数。

<image>

### 开平方根

用来开平方根的纳皮尔的骨头会用到第十根柱子，上有三个直排。第一排上有数字1-9的平方，第二排是数字2,4, ...,18，第三排则是1-9。

1｜2｜3｜4｜5｜6｜7｜8｜9｜√

1｜0/1｜0/2｜0/3｜0/4｜0/5｜0/6｜0/7｜0/8｜0/9｜0/1 2 1

2｜0/2｜0/4｜0/6｜0/8｜1/0｜1/2｜1/4｜1/6｜1/8｜0/4 4 2

3｜0/3｜0/6｜0/9｜1/2｜1/5｜1/8｜2/1｜2/4｜2/7｜0/9 6 3

4｜0/4｜0/8｜1/2｜1/6｜2/0｜2/4｜2/8｜3/2｜3/6｜1/6 8 4

5｜0/5｜1/0｜1/5｜2/0｜2/5｜3/0｜3/5｜4/0｜4/5｜2/5 10 5

6｜0/6｜1/2｜1/8｜2/4｜3/0｜3/6｜4/2｜4/8｜5/4｜3/6 12 6

7｜0/7｜1/4｜2/1｜2/8｜3/5｜4/2｜4/9｜5/6｜6/3｜4/9 14 7

8｜0/8｜1/6｜2/4｜3/2｜4/0｜4/8｜5/6｜6/4｜7/2｜6/4 16 8

9｜0/9｜1/8｜2/7｜3/6｜4/5｜5/4｜6/3｜7/2｜8/1｜8/1 18 9

求出46785399的平方根

1.把46785399分为两位两位一组，46 78 53 99。（如果奇数位数，如83559，写成8 35 59）

2.从最左边那组，46，开始。找出比这数最小的完全平方数，是在第六横排上的36。

3.因为是从第六横排上挑出来的，所以答案的第一位是6。

4.找到第十根柱子上的第六横排第二直排，12，然后把1跟2的柱子放在底座上。

5.用46减去36得到10，然后把上面下一组的78移到10的右边。

1｜0/1｜0/2｜0/1 2 1 2｜0/2｜0/4｜0/4 4 2 3｜0/3｜0/6｜0/9 6 3 4｜0/4｜0/8｜1/6 8 4 5｜0/5｜1/0｜2/5 10 5 6｜0/6｜1/2｜3/6 12 6 7｜0/7｜1/4｜4/9 14 7 8｜0/8｜1/6｜6/4 16 8 9｜0/9｜1/8｜8/1 18 9｜_____________ √46 78 53 99 = 6 36–10 78

7.找出比1078还要小但最大的数，在此第八横排的1024是最大的：

```
 <sup>0</sup>/<sub>8</sub> <sup>1</sup>/<sub>6</sub> <sup>6</sup>/<sub>4</sub> → 1024
```

- 8为答案的下一位数，写在6旁边，然后把1078减去1024得到54。

1｜0/1｜0/2｜0/1 2 1｜121 2｜0/2｜0/4｜0/4 4 2｜244 3｜0/3｜0/6｜0/9 6 3｜369 4｜0/4｜0/8｜1/6 8 4｜496 5｜0/5｜1/0｜2/5 10 5｜625 6｜0/6｜1/2｜3/6 12 6｜756 7｜0/7｜1/4｜4/9 14 7｜889 8｜0/8｜1/6｜6/4 16 8｜1024 9｜0/9｜1/8｜8/1 18 9｜1161｜_____________ √46 78 53 99 = 68 36–10 78 10 24 ----- 54

9.把之前的12乘上10，再加上第十根柱子第八横排第二直排的数，16，得136。

10.重复上述步骤可得到结果：

1｜0/1｜0/3｜0/6｜0/1 2 1 2｜0/2｜0/6｜1/2｜0/4 4 2 3｜0/3｜0/9｜1/8｜0/9 6 3 4｜0/4｜1/2｜2/4｜1/6 8 4 5｜0/5｜1/5｜3/0｜2/5 10 5 6｜0/6｜1/8｜3/6｜3/6 12 6 7｜0/7｜2/1｜4/2｜4/9 14 7 8｜0/8｜2/4｜4/8｜6/4 16 8 9｜0/9｜2/7｜5/4｜8/1 18 9｜_____________ √46 78 53 99 = 68 36–10 78 10 24 ----- 54 53

11.再次找到比5453还要小但最大的数，为4089。5453减去4089为1364，并把3写在68的旁边。

1｜0/1｜0/3｜0/6｜0/1 2 1｜1361 2｜0/2｜0/6｜1/2｜0/4 4 2｜2724 3｜0/3｜0/9｜1/8｜0/9 6 3｜4089 4｜0/4｜1/2｜2/4｜1/6 8 4｜5456 5｜0/5｜1/5｜3/0｜2/5 10 5｜6825 6｜0/6｜1/8｜3/6｜3/6 12 6｜8196 7｜0/7｜2/1｜4/2｜4/9 14 7｜9569 8｜0/8｜2/4｜4/8｜6/4 16 8｜10944 9｜0/9｜2/7｜5/4｜8/1 18 9｜12321｜_____________ √46 78 53 99 = 683 36–10 78 10 24 ----- 54 53 40 89 ----- 13 64

12.把3乘2的结果加上之前136的十倍，得到1366。把1,3, 6,6的版子摆入底座。

13.再度重复上述步骤。现在比最底下的数小的数是第九横排的123021。

1｜0/1｜0/3｜0/6｜0/6｜0/1 2 1｜13661 2｜0/2｜0/6｜1/2｜1/2｜0/4 4 2｜27324 3｜0/3｜0/9｜1/8｜1/8｜0/9 6 3｜40989 4｜0/4｜1/2｜2/4｜2/4｜1/6 8 4｜54656 5｜0/5｜1/5｜3/0｜3/0｜2/5 10 5｜68325 6｜0/6｜1/8｜3/6｜3/6｜3/6 12 6｜81996 7｜0/7｜2/1｜4/2｜4/2｜4/9 14 7｜95669 8｜0/8｜2/4｜4/8｜4/8｜6/4 16 8｜109344 9｜0/9｜2/7｜5/4｜5/4｜8/1 18 9｜123021｜_____________ √46 78 53 99 = 6839 36–10 78 10 24 ----- 54 53 40 89 ----- 13 64 99 12 30 21 -------- 1 34 78

14.再把9加到答案当中，得到整数答案6839。

我们把题目给的数46785399用完了，但是底下还有余数13478。这意味着6839只是答案的整数部分，$\sqrt{46785399}$的实际值应当比6839大，比6840小。如果有需要继续做下去以得到小数部分的话，下一组的两个数字就要用00：

1｜0/1｜0/3｜0/6｜0/7｜0/8｜0/1 2 1 2｜0/2｜0/6｜1/2｜1/4｜1/6｜0/4 4 2 3｜0/3｜0/9｜1/8｜2/1｜2/4｜0/9 6 3 4｜0/4｜1/2｜2/4｜2/8｜3/2｜1/6 8 4 5｜0/5｜1/5｜3/0｜3/5｜4/0｜2/5 10 5 6｜0/6｜1/8｜3/6｜4/2｜4/8｜3/6 12 6 7｜0/7｜2/1｜4/2｜4/9｜5/6｜4/9 14 7 8｜0/8｜2/4｜4/8｜5/6｜6/4｜6/4 16 8 9｜0/9｜2/7｜5/4｜6/3｜7/2｜8/1 18 9｜_____________ √46 78 53 99 = 6839. 36–10 78 10 24 ----- 54 53 40 89 ----- 13 64 99 12 30 21 -------- 1 34 78 00

这些步骤可以一直重复使得到的答案无限逼近正解。

最后，如果要求平方根的数是小数的话，将数字分组的时候整数部分跟小数部分要分开分组；整数部分如常，小数部分则是方向相反。

例如数字54782.917的分组情况为：

5 47 82 . 91 7

接着便可开平方。