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/