手算平方根的正確方法


手算平方根的「正確」方法,是什么方法?如果你認為是牛頓迭代法的話,你可以親自試一下,看看效果如何:

(原帖 kz3007407872, 鑒於百度貼吧的帖子是公開的,我就不打碼了)

其實牛頓迭代法非常好,在電腦上快得飛起。但是手算就不行了。

那么「正確」的方法是什么呢?是這個:

(原帖同上)

說得神神叨叨的,還能開無限小數,到底是什么方法?帖子里沒說。

不過,幸運的是,我有一天翻 Wiki 的時候,碰巧翻到了這個方法。本文將詳細介紹這個方法。


\(2\) 的算術平方根是多少?是 \(\sqrt{2}\). 不是 \(1.41\), 也不是 \(1.414213\). 所以,本文討論的計算,是以(十進制小數)近似值為主的。准確地說,是不足近似值。

近似值,無論是精確到小數點后 1 位還是 1000 位,都是近似值。所以,計算近似值,先得確定精度(即:你算到哪一 位 / 數量級 就滿意了)。

先討論對一位數開平方,精確到小數點后 1 位的情況(以計算 \(\sqrt{2}\) 為例)。

這一上來就有一個問題:大家都知道 \(\sqrt{2}\) 精確到一位小數是 \(1.4\), 但為是么是 \(1.4\), 不是 \(1.3\) 或 \(1.5\)?

顯然,\(1.5^2 > 2\), 不是我們要的不足近似值。而 \( 1.3^2 < 1.4^2 < 2 \) 所以在不過剩的情況下,最接近的(在給定精度范圍內的)數是 \(1.4\).

既然是這樣的話,我們就可以把這個過程「概括」成這樣一個問題的求解:

求最大的一位數 \(x\), 使得不等式 \( \overline{1.x}^2 \leqslant 2 \) 成立。

求出 \(x=4\) 后,如果要繼續提高精度,那么再求解這個問題:

求最大的一位數 \(y\), 使得不等式 \( \overline{1.4y}^2 \leqslant 2 \) 成立。

(精度還可以繼續提高)

……

這其實就是大家計算平方根最常用的方法,即「試乘」。但是計算 \( \overline{1.x} \) 的平方,是多位數乘多位數,不好算。而且隨着精度增加,越來越難算(\(\overline{1.414213x}^2\) 什么的,想想就要爆炸)。既然硬算不好算,那么就需要技巧。什么技巧呢?我們可以把式子變形一下,來降低運算的規模:

\( (1+\frac{x}{10})^2 \leqslant 2 \) (1)

把完全平方展開,得:

\( 1+\frac{2x}{10}+\frac{x^2}{100} \leqslant 2 \)

\( \Leftrightarrow \frac{2x}{10}+\frac{x^2}{100} \leqslant 1 \)

\( \Leftrightarrow 20x+x^2 \leqslant 100 \)

\( \Leftrightarrow x(20+x) \leqslant 100 \)

\( \Leftrightarrow x\cdot \overline{2x} \leqslant 100 \) (2)

這樣,運算規模就從多位數乘多位數降低到了一位數乘多位數,立馬好算了許多。

繼續提高精度,求百分位上的數字 \(y\):

\( (1+\frac{x}{10}+\frac{y}{100})^2 \leqslant 2 \)

\( \Leftrightarrow {\left [(1+\frac{x}{10})+\frac{y}{100} \right ]}^2 \leqslant 2 \)

\( \Leftrightarrow (1+\frac{x}{10})^2+2(1+\frac{x}{10})\frac{y}{100}+\frac{y^2}{10000} \leqslant 2 \)

\( \Leftrightarrow 2(1+\frac{x}{10})\frac{y}{100}+\frac{y^2}{10000} \leqslant 2-(1+\frac{x}{10})^2 \)

\( \Leftrightarrow 2(1+\frac{x}{10})\frac{y}{100}+\frac{y^2}{10000} \leqslant 2-(1+\frac{2x}{10}+\frac{x^2}{100}) \)

\( \Leftrightarrow 2(1+\frac{x}{10})\frac{y}{100}+\frac{y^2}{10000} \leqslant 1-(\frac{2x}{10}+\frac{x^2}{100}) \)

\( \Leftrightarrow 20(10+x)y+y^2 \leqslant 100 \left [ 100-(20x+x^2) \right ] \)

\( \Leftrightarrow y \left [ 20(10+x)+y \right ] \leqslant 100 \left [ 100-x(20+x) \right ] \)

\( \Leftrightarrow y(20\cdot \overline{1x}+y) \leqslant 100 \left [ 100-x\cdot \overline{2x} \right ] \)

\( \Leftrightarrow y(2\cdot \overline{1x0}+y) \leqslant 100 \left [ 100-x\cdot \overline{2x} \right ] \)

\( \Leftrightarrow y\cdot \overline{\overline{(2\cdot\overline{1x})}y} \leqslant 100 \left [ 100-x\cdot \overline{2x} \right ] \) (3)

 代入 \(x=4\) 即可求出 \(y\):

\( y\cdot \overline{28y} \leqslant 100 ( 100-4\cdot 24 ) \) (4)

我們發現,(3) 式的右側,出現了與 (2) 式(移項后的一邊)相同的部分,這個部分還被乘上了 \(100\)。而 (3) 式左側,跟 \(2\) 式左側形式相同,都是 未知數 乘以 已得到結果序列的兩倍在末尾處添上這個未知數(即帖子中所說「多位數的位數是已開方位數加 1」)。現在,其實已經可以歸納出規律,描述出一個完整的算法了。


但是,這時有些人就會不服:

**,這些破爛式子,都 ** 什么意思啊?*** 為什么要把已得到的結果翻一倍啊?把上一步的不等式兩邊作差,再乘以 100, 又 ** 是搞什么飛機?

對於這個開方法來說,如果只用代數去推導,確實會讓人一頭霧水。但是,一但用幾何的方法直觀地說明一下,這些步驟的意義就會非常明顯。看了下面這個幾何說明之后,你就會發現,這些看似「無厘頭」的步驟,其實都是天經地義的。

看一下這張圖(完全平方公式在正數情況下的幾何證明):

(來源:原創 / Public Domain)

再看看這張圖:

(來源:Wikipedia

發現什么了嗎?

剛才計算 \(\sqrt{2}\) 近似值的百分位的過程,實際上就是在這個面積為 \(2\) 的綠色大正方形中,割出一塊邊長為 \( \overline{1.4x} \; (x=0,\;1,\;2,\;\cdots 9) \) 的小正方形,使 \(x\) 最大。而這個小正方形又可以被兩條互相垂直的線切成四個部分。其中一個是邊長為己經算出來的部分(精確到上一位的結果,即 \(1.4\))的正方形(藍色),剩下的是兩個矩形(橙色)和一個正方形(粉色)。

整個小正方形的邊長是 \( \overline{1.4x} \), 藍色正方形的邊長為 \(1.4\), 所以橙色矩形的寬就是 \( x\cdot 10^{-2} \), 長就是 \(1.4\), 粉色正方形的邊長就是 \( x\cdot 10^{-2} \).

現在我們要求這個百分位,實際上就是要讓小正方形在大小不超過大正方形的前提下,邊長(面積)達到最大。怎么保證面積不超過大正方形呢?我們從大正方形的面積中減去藍色正方形的面積,使兩個橙色矩形和粉色正方形的面積和不超過這個面積差即可,即:

\( 2S_{orange}+S_{pink} \leqslant S_{green} - S_{blue} \)

代入它們的值,可得:

\( 2 \times 1.4 \cdot (x \cdot 10^{-2}) + (x \cdot 10^{-2})^2 \leqslant 2-1.4^2 \)

\( \Leftrightarrow 2 \times 1.4 \cdot (x \cdot 10^{-2}) + x^2 \cdot 10^{-4} \leqslant 2-1.4^2 \)

\( \Leftrightarrow 2 \times 1.4 \cdot (x \cdot 10^2) + x^2 \leqslant 10^4(2-1.4^2) \)

\( \Leftrightarrow 20 \times 14 x + x^2 \leqslant 10^4(2-(1+0.4)^2) \)

\( \Leftrightarrow x(280 + x) \leqslant 10^4(2-(1+0.8+0.16)) \)

\( \Leftrightarrow x \cdot \overline{28x} \leqslant 10^4(1-0.96) \)

\( \Leftrightarrow x \cdot \overline{28x} \leqslant 10^4(1-0.96) \)

\( \Leftrightarrow x \cdot \overline{28x} \leqslant 100 \times (100-96) \)

跟 (4) 式是不是完全一樣?所以,這樣一解釋,那些步驟的意義就很明顯了:

  • 上次的結果 翻一倍,相當於是在求 兩個 橙色矩形 的面積。在 \( 20x+x^2 \leqslant 100 \Leftrightarrow x(20+x) \leqslant 100 \) 這個式子中,\(20x\) 就相當於橙色部分,\(x^2\) 就相當於粉色部分
  • 那個作差操作,相當於從總面積中扣除藍色的已求部分;再往下算就是再從中扣掉精度提升后藍色已求部分增加的面積。
  • 乘以 100 是因為新的一位比上一位降低了一個數量級,多出來的那三塊面積就少了兩個數量級

現在,我們就以計算 \( \sqrt{3} \)、\( \sqrt{65536} \) 和 \( \sqrt{\frac{1}{3}} \) 為例,完整地描述一下這個算法。

例 1 計算 \( \sqrt{3} \), 精確到百分位。

首先,在紙上像這樣寫出被開方數(被開方數的兩位對應結果的一位):

 找到結果最高位的值(即,求最大的一位數 \(x\), 使 \( x^2 \leqslant 3 \)),寫在橫線上的對應位置上:

把 \(x^2\) 寫到這一位下面,像做除法那樣畫道橫線,作個差:

把后面兩位的一組數拽下來補到剛算出的差后面:

把已經算出的結果翻倍(如果有小數點的話,還要去掉小數點),寫在一旁:

前面添上一條橫線和一個乘號,后面添上一條橫線和一個小於等於號,得到一個不等式:

在每條橫線上填一個盡量大的一位數(兩條橫線上是同一個數),同時保證不等式成立

把這個一位數寫在上面作為結果:

把乘法的結果寫在下面(7×27=189),繼續作差:

重復上述過程,直到達到所需精度:

……

例 2 計算 \( \sqrt{65536} \).

與例 1 不同的是,這次最后一個不等式是正好取得等號的。取得等號,就說明得數已經是精確結果,不用再往下算了。

例 3 計算 \(\sqrt{\frac{1}{3}}\), 精確到千分位。

先把 \(\frac{1}{3}\) 轉換為無限小數 \(0.333\cdots\),再開方:

就跟帖子里說的一樣,對無限小數開方,運算量不會增大(跟有限小數的計算步驟是完全一樣的)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM