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
少废话,上代码:

用魔改
比起之前的循环二分法(是二分法,那个贴子写错了),这个方法的性能比原来的要好很多。可以说几乎是最佳了。数学推导:

只需要一些高中数学基础就可以看得懂。懂的人应该已经看出一些问题。这个过程中直接假设了 a > 0 。分开处理:1. a = 0, 则结果返回 0 。但是 JS 和普遍的语言 0 ^ 0 返回 1 ,所以在判断 底数 是0前先判断次方是否为 0 。这就是前两个 if 判断干的事情。
2. a < 0, 首先要知道负数的非整数乘方是未定义的。因此如果乘方不是整数,直接返回 NaN 。是乘方是整数,我们就先算出底数取正的情况,然后根据判断次方单偶决定返回值是否为负 。(这一块由第三个 if 判断负责)
处理完特殊情况,直接上公式就可以了。
完