From Test-Scratch-Wiki

Translate: - English - Türkçe - 中文 

指數運算的結果。nm指將n自乘m次(針對m為正整數的場合)。把nm看作乘方的結果,叫做「n的m次冪」或「n的m次方」,其中,n稱為「底數」,m稱為「指數」(寫成上標)。當不能用上標時,例如在編程語言或電子郵件中,通常寫成n^m。例如:

23 = 2 * 2 * 2 = 8 讀作:2的3次方,或2的3次冪。

大家可以使用這個積木塊來讓指數運算更容易編程: [1] (() ^ ():: operators)

在 Scratch中的計算方法

在Scratch中有多種方法來求解指數。這裡有兩個:

循環的方法

Warning Note: 此方法只能用於整數

這個腳本將能夠在Scratch中解決指數; 但是,它不能計算小數:

when flag clicked
ask [What is the base number?] and wait
set [1st# v] to (answer)
ask [To what power?] and wait
set [2nd# v] to (answer)
set [ans v] to (1)
repeat ([abs v] of (2nd#))
set [ans v] to ((ans) * (1st#))
end
if <(2nd#) < [0]> then
set [ans v] to ((1) / (ans)) // a quick workaround for negative powers
end
say (join [The answer is: ] (ans)) for (2) secs

如何操作

  • 變量 "1st#" 是底數, 這是循環運算的數字。
  • 變量 "2nd#" 是指數,是程序裡面循環乘法的次數。
  • 變量 "ans" 是答案, 底數"1st#"循環乘"2nd#"次後的答案。

對數法

對數法比循環法快得多。

([10 ^ v] of ((power) * ([log v] of ([abs v] of (base)))))

或者

([e ^ v] of ((power) * ([ln v] of ([abs v] of (base)))))

如何操作

  • 變量 "base" 底數, 變量 "power" 是指數, 或基數乘以的次數。返回值是答案。
  • 數學運算中: n * log m = log mn and 10log mn = mn.

特殊案例

這些都是錯誤,所以建議編程中注意:

  • 指數是0:當指數為零時,冪的值是有意義的。此時規定a0=1 叫作零指數冪,又叫零次冪。但是000是無意義的。
  • 底數是 0: 因為對數定義中 log 0是不允許的, 使用 if-else 判斷和排除基數為0的問題。, 如果基數為零,指數為一個正數,答案為0; 000的0次方是懸而未決的,在某些領域定義為1、某些領域不定義(無意義),所以預先怎加一個判斷以防止出現錯誤。
  • 底數是負數:比如 xp 其中 p(指數) 是一個整數, x(底數) 是一個負數, 將無法使用對數方式來計算, 因為對數運算中 log(-1) 是不允許的。 ( 10x = -1是不存在的)。 解決這個問題的方法是:
    • 使用循環乘法,只要指數是整數就可以使用循環乘法。
    • 負指數冪等於把冪指數絕對值後所得的冪的倒數。也就是分解負指數並找出指數絕對值。此外,使用if塊來判斷指數p是奇數還是偶數(如果p mod 2 = 0,則p是偶數)。
set [result v] to ([abs v] of (base)) // used to spread out math over two lines
set [result v] to ([e^ v] of ((power)*([ln v] of (result)))::operators)
if<(base) < [0]> then
set [result v] to ((1) / (result))
end
Warning Note: 正有理數, 例如 10½ 意思是10的1次方再開2次方根. 因此,這可以用來計算根數。

Scratch編輯

Archive.png This article or section documents a feature not included in the current version of Scratch (2.0). It is only useful from a historical perspective.

本文或部分積木塊在Scratch(2.0)中未包含。

自定義積木塊可以解決指數。相關的代碼是:

('%n ^ %n' #r #exp:of:)
exp:t1 of:t2
^ t1 raisedTo: t2

參考

  1. http://scratch.mit.edu/discuss/topic/15646/