【考古】Scratch 乘方积木 2.0
scratch吧
全部回复
仅看楼主
level 8
小C数星星 楼主
看了下 tieba.baidu.com/p/5827507127 的 48 楼,觉得循环太浪费资源,因此做了个终极版的乘方积木 2.0
少废话,上代码:
用魔改[滑稽]出来的乘方积木验证计算正确(用的是 JS 的 ** 运算符)
比起之前的循环二分法(是二分法,那个贴子写错了),这个方法的性能比原来的要好很多。可以说几乎是最佳了。
数学推导:
只需要一些高中数学基础就可以看得懂。懂的人应该已经看出一些问题。这个过程中直接假设了 a > 0 。分开处理:
1. a = 0, 则结果返回 0 。但是 JS 和普遍的语言 0 ^ 0 返回 1 ,所以在判断 底数 是0前先判断次方是否为 0 。这就是前两个 if 判断干的事情。
2. a < 0, 首先要知道负数的非整数乘方是未定义的。因此如果乘方不是整数,直接返回 NaN 。是乘方是整数,我们就先算出底数取正的情况,然后根据判断次方单偶决定返回值是否为负 。(这一块由第三个 if 判断负责)
处理完特殊情况,直接上公式就可以了。

2020年04月23日 13点04分 1
level 8
小C数星星 楼主
dd
2020年05月06日 10点05分 2
帮你
2020年05月06日 11点05分
level 10
sc难道没有乘方积木吗[滑稽][滑稽](大佬厉害)
2020年05月08日 10点05分 3
没有[滑稽][滑稽]
2020年05月08日 10点05分
level 1
emm……有一个小问题:负数的小数次方也可能不是NaN,比如(-32)^0.2 = -2。
a^(1/n) 其实就是对a开n次方,这可咋解决嘞?[疑问]
2020年07月25日 01点07分 4
好像挖坟了。但是这在其它语言都是不成立的,所以就不考虑这问题。其实可以把 EXPONENT 的倒数算出来,如果是整数且单数,那就返回 - (BASE) ^ (EXPONENT) 。其它情况都 failure
2020年07月25日 01点07分
JS 算出来是 NaN,python 算出来的是 complex
2020年07月25日 01点07分
@小C数星星 (其实Win calc能算出来……)哈哈,谢谢^_^
2020年07月25日 02点07分
1