Zho:求解指数

🏴󠁧󠁢󠁥󠁮󠁧󠁿''' 指数运算的结果. nm指将n自乘m次（针对m为正整数的场合）. 把nm看作乘方的结果，叫做“n的m次幂”或“n的m次方”，其中，n称为“底数”，m称为“指数”（写成上标）. 当不能用上标时，例如在编程语言或电子邮件中，通常写成n^m. 例如：

23 = 2 * 2 * 2 = 8 读作：2的3次方，或2的3次幂.

大家可以使用这个积木块来让指数运算更容易编程： ( ^ :: operators)

在 Scratch中的计算方法
在Scratch中有多种方法来求解指数. 这里有两个：

循环的方法
这个脚本将能够在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 m n = 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

Scratch编辑
本文或部分积木块在Scratch（2.0）中未包含.

自定义积木块可以解决指数. 相关的代码是：

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

参考
Potenzieren 累乗