讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 3.5 非常大和非常小 >

3.5 非常大和非常小

還記得第 1 章中將兩個非常大的數相乘嗎?我們得到的答案也是一個非常大的數。

有時 Python 會用一種稍微不同的方式顯示非常大的數。可以在交互模式中試試看:

>>> print 9938712345656.34 * 4823459023067.4564.79389717413e+025>>>  

(具體鍵入什麼數並不重要——任何包含小數的大數值都可以。)

這個 e 是計算機中顯示非常大或非常小的數時採用的一種方法。這叫做 E 記法(E-notation)。處理非常大(或非常小)的數時,要把所有數字以及小數位都顯示出來可能很費勁。這種數在數學和科學領域經常出現。例如,如果一個天文程序要顯示從地球到 Alpha Centaur 星的公里數,可能會顯示為 38000000000000000 或者 38 000 000 000 000 000(38 後面有 15 個 0)。不論哪種方式,數完所有這些 0 都會讓你累得夠嗆。

顯示這些數還有另一種方式,就是使用科學計數法(scientific notation),就是一個小數再乘以一個 10 的冪。在科學計數法中,地球到 Alpha Centauri 的距離可以寫作:3.8 × 1016(看到了嗎,16 抬高了,而且要小一點)。這讀作「3.8 乘以 10 的 16 次冪」或者「3.8 乘以 10 的 16 次方」。它的意思就是,把 3.8 的小數點向右移 16 位,並在這個過程中根據需要補 0。

如果可以像這裡一樣,把 16 寫作指數,稍稍抬高一點,再寫得小一點,科學計數法就很適用。如果你用紙和筆,或者使用一個支持上標的程序,就可以用科學計數法。

術語箱

上標(superscript)是指一個字符或一組字符比其餘文本高一些,例如 1013。這裡的 13 就是上標。通常上標還要比正文小一點。

下標(subscript)也類似,不過這些字符會比其餘文本低,同樣也會小一點, 比如 log2。這裡的 2 就是一個下標。

不過並不是哪裡都能使用上標,所以還有另一種方法,就是 E 記法。E 記法只是科學計數法的另一種寫法。

E 記法

在 E 記法中,這個數要寫作 3.8E16 或者 3.8e16。讀作「3.8 指數 16」或者簡讀作「3.8 e 16」。這裡假設指數是 10 的冪。這就等同於寫成 3.8×1016。

在大多數程序和計算機語言(包括 Python)中,大寫和小寫 E 都是 允許的。

對於非常小的數,如 0.0000000000001752,可以使用一個負指數。科學計數法會寫作 1.752×10-13,E 記法會寫作 1.752e-13。負指數表示要把小數點向左移而不是向右移。

採用 E 記法,可以在 Python 中輸入非常大和非常小的數(或者可以是任何數)。後面我們還會學習如何讓 Python 使用 E 記法打印數。

試試採用 E 記法輸入一些數:

>>> a = 2.5e6>>> b = 1.2e7>>> print a + b14500000.0  

儘管我們用 E 記法輸入了數,但得出的答案卻是一個常規的小數。這是因為,除非你特別要求,或者數字確實非常大或非常小(有很多個 0),否則 Python 不會用 E 記法顯示數字。

可以試試看:

>>> c = 2.6e75>>> d = 1.2e74>>> print c + d2.72e+75  

這一次 Python 會自動用 E 記法顯示答案,因為顯示一個有 73 個 0 的數太不可思議了!

如果希望用 E 記法顯示類似 14 500 000 的數,需要給 Python 下達一些特殊的指令。我們將在本書的第 21 章學習更多相關內容。

別擔心,放鬆點

如果你還不太理解 E 記法到底是怎麼回事,不用擔心。這本書後面的程序中不會用到它。我只是想讓你瞭解一下它的原理,沒準以後你會用到。

如果使用 Python 來完成一些數學運算,得到的答案是一個類似 5.673745e16 的數,至少現在你知道這是一個非常大的數,而不是出現了什麼錯誤。

指數與 E 記法

不要把自乘得到冪(也稱為求冪)和 E 記法弄混了。

  • 3**5 表示 35,或「3 的 5 次冪」,也就是 3 * 3 * 3 * 3 * 3,等於 243。

  • 3e5 表示 3 * 105 或者「3 乘以 10 的 5 次冪」,也就是 3 * 10 * 10 * 10 * 10 *10,結果等於 300 000。

  • 求冪是指一個數自乘得到冪。E 記法表示乘以 10 的幾次冪。

有些人可能會把 3e5 和 3**5 都讀作「3 指數 5」,不過,它們是完全不同的。怎麼讀並不重要,只要你懂得它們分別代表什麼含義。

你學到了什麼

在這一章,你學到了以下內容。

  • 用 Python 如何完成基本數學運算。

  • 整數和浮點數。

  • 求冪(自乘得到一個冪)。

  • 如何計算取余(餘數)。

  • E 記法的有關內容。

測試題

1. Python 中乘法使用哪個符號?

2. Python 計算 8 / 3 的答案是什麼?

3. 怎麼得到 8 / 3 的餘數?

4. 怎麼得到 8 / 3 的小數結果?

5. Python 中計算 6 * 6 * 6 * 6 的另一種做法是什麼?

6. 採用 E 記法,17 000 000 要寫作什麼?

7. 4.56e-5 如果按常規的寫法是什麼(不是 E 記法)?

動手試一試

1. 使用交互模式或者編寫一個小程序解決下面的問題。

 (a) 3 個人在餐廳吃飯,想分攤飯費。總共花費 35.27 美元,他們還想留 15% 的小費。每個人該怎麼付錢?

 (b) 計算一個 12.5m×16.7m 的矩形房間的面積和周長。

2. 寫一個程序,把溫度從華氏度轉換為攝氏度。轉換公式是 C = 5 / 9* (F-32)。(提示:當心整除問題!)

3. 你知道怎麼計算坐車去某個地方需要花多長時間嗎?相應的公式(用文字表述)是「旅行時間等於距離除以速度」。編寫一個程序,計算以 80 km/h 的速度行駛 200 km 需要花多長時間,並顯示答案。