人们在没有计算机的帮助下是如何计算根号3？
高中教我们数学竞赛的老师传授过一招竖式手算开根的操作，第一次见识时觉得简直不可思议。现在自己做了高中老师，时不时也拿这招在学生面前秀一波操作，屡试不爽。 就以 \sqrt{3} 为例。 首先，找出自乘后依然小于 3 的最大正整数，显然是 1，作为求根的第一步的结果，写到竖式最顶上。取其自乘的结果，从要开方的数字 3 中扣除掉，得到误差值 2。这里所谓的误差具体是指，目前开根的结果，平方后和实际目标的差值为 2，即 3-1^2=2。 \begin{align*} &\text{ }\text{ }\color{green}{1}\\ (\color{green}{1}) &\overline{\big)3.000000}\\ &\text{ }\underline{\text{ }\color{green}{1}\text{ }}\\ &\text{ }\text{ }2 \end{align*} \\ 补两位 0 下来，得到 200。取现有结果 1 的两倍，作为一个过渡值，写到 200 边上，我们得到的就是括号里的这个 2。 \begin{align*} &\text{ }\text{ }\color{red}{1}\\ ({1}) &\overline{\big)3.000000}\\ &\text{ }\underline{\text{ }{1}\phantom{000} }\\ ({\color{red}{2}\_})&\phantom{0}2\phantom{.}\color{blue}{00} \\  \end{align*} \\ 接下来，脑补下在这个过渡值后面怎么补个最大的个位数字 X，使得 2X \times X 依然比 200 小。注意到 27\times7=189<200，但是 28\times8=224>200，因此这里要补的数值即为 7。 这个数字即为开根出来的下一位有效数字。快乐地搬运至竖式最顶上，得到精度稍高一点的开根结果 1.7。 顺势把 189 从 200 中扣除，得到下一步要处理的误差值 11。补齐小数点，不难验证，3-1.7^2=3-2.89=0.11。 \begin{align*} &\phantom{0}{\color{red}{1}}.\color{green}{7}\\ (1) &\overline{\big)3.000000}\\ &\text{ }\underline{\text{ }1\phantom{000} }\\ ({\color{red}{2\color{green}{7}}})&\phantom{0}2\phantom{.}\color{blue}{00} \\ &\text{ }\text{ }\underline{\color{green}{1\phantom{.}89}\phantom{0}}\\ &\phantom{00.}11 \end{align*} \\ 补两位 0 下来，得到 1100。取现有结果 17 的两倍，作为新的过渡值，得到括号里的这个 34。 \begin{align*} &\phantom{0}{\color{red}{1}}.\color{red}{7}\\ (1) &\overline{\big)3.\,000000}\\ &\text{ }\underline{\text{ }1\phantom{000} }\\ (27)&\phantom{0}2\phantom{.}{00} \\ &\text{ }\text{ }\underline{1\phantom{.}89\phantom{.}\phantom{00}}\\ (\color{red}{34\_})&\phantom{00.}11\color{blue}{00} \\ \end{align*} \\ 接着继续脑补过渡值该补上个什么个位数字 X。注意到 343\times3=1029<1100，但是 344\times4 = 1376 > 1100，因此这里要补的数值即为 3。 这样就得到了开根出来的新一位有效数字。 类似地也可以验证，这一步得到的结果 1.73 ，平方后和期望值 3 之间的误差有：3-1.73^2 = 3-2.9929=0.0071，这也就是后面要继续处理的误差值。 \begin{align*} &\phantom{0}{\color{red}{1}}.\color{red}{7}\color{green}{3}\\ ({1}) &\overline{\big)3.000000}\\ &\text{ }\underline{\text{ }1\phantom{000} }\\ (27)&\phantom{0}2\phantom{.}{00} \\ &\text{ }\text{ }\underline{1\phantom{.}89\phantom{.}\phantom{00}}\\ (\color{red}{34}\color{green}{3})&\phantom{00.}11\color{blue}{00} \\ &\phantom{0.0}\underline{\color{green}{1029}}\\ &\phantom{0000.}71 \end{align*} \\ 无限重复这个操作，可以手算根号到任意精度。 \begin{align*} &\phantom{0}{\color{red}{1}}.\color{red}{73}\color{green}{2}\\ ({1}) &\overline{\big)3.000000}\\ &\text{ }\underline{\text{ }1\phantom{000} }\\ (27)&\phantom{0}2\phantom{.}{00} \\ &\text{ }\text{ }\underline{1\phantom{.}89\phantom{.}\phantom{00}}\\ (343)&\phantom{00.}1100 \\ &\phantom{0.0}\underline{{1029}\phantom{00}}\\ (\color{red}{346}\color{green}{2})&\phantom{0000.}71\color{blue}{00} \\ &\phantom{0.000}\underline{\color{green}{6924}}\\ &\phantom{00000.}176 \end{align*} \\ 于是有 \sqrt{3} = 1.732\cdots \\ 这套操作的原理其实并不复杂，其核心是一个挺简单的代数恒等式。 (10a + b)^2 = 100a^2 + (20a + b) \times b \qquad (*) \\ 对于一个待开根的数，如果我们已经找到了一个初步的结果，可以怎么去对这个结果做修正呢？在这里，如果把 (*) 式中的 10a 视作现有的开根结果，b 就是要找的下一位有效数字。前面竖式开根运算中用到的过渡值，其实就来自于(*) 式中的 20a+b 这一项，而在过渡值里面脑补的个位 X，所做的其实就是在凑 (20a + b) \times b 这步修正误差的运算。如此得到下一位有效数字，我们可以继续对精度提升一位后的现有结果进行同样的操作，不断提升开根的精度。 碎碎念，能用知乎的公式编辑器把这堆竖式排版打出来，我今晚得给自己加一个鸡腿！