计算负基数的正非整数幂
Calculating positive non-integer power of negative base
据我所知
(-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++标准库中没有幂函数可以计算您想要的结果。
- 如何计算整数的十进制数字?
- 计算总和为 x 的所有整数子集(包括负数)
- 如何计算整数链中使用了多少次数字?
- 计算负基数的正非整数幂
- 通过在带有 C++ 的列表中添加连续元素来计算新的整数列表
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 计算将整数n分解为4平方和的方法的数量
- 如何计算数组整数的总可能组合
- 当我们C++将两个数组的整数除以 时,如何获得浮点数计算;
- 计算 (64 位无符号整数) * (64 位无符号整数) 的商除以 2^64
- 为什么按位运算符在使用与整数中提供的位数相同的位数计算可能的最大范围时会产生错误
- 如何使用 C++ std 计算整数集合的前导零和尾随零
- 运算符"|"如何计算两个整数?
- 如何计算两个负整数 c++ 之间的总和
- 从文本文件中读取并使用 sizeof 结果计算整数的数量到 nan
- C 和 C++ 中的整数计算溢出
- 仅使用整数计算两条线的交点
- 一种在C++中执行基本 128 位整数计算的有效方法
- 算法C/C++:用n和d 32或64位整数计算(2^n)%d的最快方法
- 整数计算的二项式系数使用boost::math::binomial_coefficient,返回值为boost::mul