幂函数 :底是自变量
幂函数(power function)形如 :底 是自变量,指数 是常数。它与指数函数 把底与指数的角色对调,两者最容易混淆,区分的唯一判据是看自变量落在哪个位置。
1 · 指数决定的三项性质
改变 得到一族形态差异很大的曲线,而定义域、奇偶性与正半轴上的单调性三项都由 唯一决定。
为正偶数时图象开口向上、是偶函数;为正奇数时关于原点中心对称、是奇函数。 时图象是等轴双曲线的两支。 为其他负数时图象不是双曲线, 的两支都在 轴上方,与双曲线的形状无关——只有 这一个取值给出双曲线。
正半轴上的单调性只看 的符号: 时在 上递增, 时递减, 时退化成常值函数 ()。无论 取何值,只要 ,曲线都恒过定点 ,因为 。
2 · 分数指数处的定义域口径
为分数时定义域需要单独交代,而其中有一处口径分歧,不说清就会与指数与对数的运算那一页矛盾。
分数指数幂 的定义要求 ,理由是负底数下它的值依赖分数的写法: 按立方根应得 ,而 按定义是 ,同一个指数约分前后给出不同结果。按这条定义, 的定义域只能是 。
另一种写法把它读作立方根函数 ,奇次根式对负数有定义,定义域是全体实数。两种读法的函数不同,图象也不同——后者在第三象限还有一支。
警示 · 本系列统一取前一种口径:写成幂 时定义域为 (),要表达在负数上也有定义的那个函数,一律写成根式 。图 1-1 的 因此只画正半轴。两种口径都能自圆其说,但混用会让「 是奇函数」这句话时对时错。
3 · 实现里的三处不一致
代码把上一节那道分歧暴露得更直接。JavaScript 的 Math.pow 采纳的正是
那条口径:Math.pow(-8, 1/3) 返回 NaN,而专门的 Math.cbrt(-8) 返回 -2。同一个数学表达式,两个函数给出的一个是无定义、一个是实数。
约分前后的分歧也照样复现:Math.pow(-8, 2/6) 返回 NaN,而先平方再开六次方的 Math.pow(Math.pow(-8, 2), 1/6) 返回 2。这与 §2 里那个手算的例子逐字对应,只是把「依赖写法」变成了「依赖调用次序」。
第三处不一致出在正半轴,而且比预想的普遍。
不是二进制可表示数,Math.pow(x, 1/3) 算的是
的 0.333333333333333314829616256247 次幂,与真正的立方根差一点。实测在
取
到
共
个点上,Math.cbrt(x) 与 Math.pow(x, 1/3) 有
个点不相等(约
),最大相对差
,即一个 ulp(node v26.6.0)。偏差本身可以忽略,但它会让 Math.pow(x, 1/3) ** 3 === x 这类判等在四成的输入上失败,作图取样时应固定用 Math.cbrt。
4 · 参考文献
- Power function. Wikipedia. 幂函数的分类与各类指数下的图象形态。https://en.wikipedia.org/wiki/Power_function
- Nth root. Wikipedia. 奇次根式对负数的定义,以及它与分数指数幂的口径差别。https://en.wikipedia.org/wiki/Nth_root
- Math.cbrt. MDN. 单列立方根方法的理由与它同
Math.pow的差别。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cbrt