计算负基数的正非整数幂

Calculating positive non-integer power of negative base

本文关键字:整数 计算      更新时间:2023-10-16

据我所知

(-1)^1.8 = [(-1)^18]^0.1 = [1]^0.1 = 1

希望我没有犯一个愚蠢的错误。

std::pow(-1, 1.8)结果是nan。另外,由于此链接:

如果基数是有限的和负的,exp是有限的和非整数的,则会发生域错误,并且可能发生范围错误。

有没有解决方法可以用C++计算上述操作?

<cmath>std::pow是实数。实数的幂(幂(函数不是为负基数定义的。

维基百科 说:

具有负基数的实指数

对数法和有理指数法都不能用于将 b r 定义为负实数 b 和任意实数r的实数。事实上,e r 对于每个实数r都是正数,因此 ln(b( 没有定义为 b ≤ 0 的实数。

有理指数方法不能用于 b 的负值 因为它依赖于连续性。函数 f(r( = br具有唯一的 从有理数到实数的连续扩展 对于每个 B> 0。但是当 b <0 时,函数 f 甚至不是连续的 在为其定义的有理数 R 集合上。

例如,考虑 b = −1。−1 的第 n 个根对于每个奇数都是 −1 自然数 n。因此,如果 n 是一个奇正整数,则 (−1((m/n(= −1 如果 m 为奇数,则 (−1((m/n(= 1,如果 m 为偶数。因此有理数的集合 (−1(q = 1 的数字q在有理数中是稠密的,就像 (−1(q = −1 的q集合。这意味着函数 (−1(q 在定义它的任何有理数q上都不连续。

另一方面,负数b的任意复幂可以 通过选择 b 的复对数来定义。

复数的幂

正实数的复幂通过 ex定义,如本节所示 上面具有正实数基的复指数 [从此引用中省略]。这些是连续的 功能。

尝试将这些函数扩展到非整数的一般情况 不是正实数的复数的幂导致 困难。我们要么定义不连续函数,要么定义多值函数 功能。这两种选择都不完全令人满意。

复数的有理幂必须是 代数方程。因此,它总是具有有限数量的 可能的值。例如,w = z1/2必须是 等式 w2= z。但是如果 w 是解,那么 −w 也是,因为 (−1(2= 1。可以使用一般规则选择称为主值的唯一但有点任意的解决方案,该规则也适用于 非理性权力。

复数幂和对数更自然地作为单一处理 黎曼曲面上的值函数。单值版本是 通过选择图纸进行定义。该值沿 分支切割。从众多解决方案中选择一个作为主要价值 给我们留下了不连续的函数,以及通常的规则 因为操纵权力会使我们误入歧途。

因此,在计算结果之前,您必须首先选择要计算的内容。C++标准库<complex>有一个函数模板std::complex<T> pow(const complex<T>& x, const T& y),它被指定用于计算(通过在C标准中定义cpow(:

cpow 函数计算复幂函数 xy,沿负实轴为第一个参数切割分支。

对于 (-1(1.8,结果将是 e-(iπ(/5 ≈0.809017 + 0.587785i。

结果,这不是您所期望的。C++标准库中没有幂函数可以计算您想要的结果。