需要pow(-1,1.2)为1

Mik*_*ail 3 c++ math numerical-methods pow

我正在使用math.h与GCC和GSL.我想知道如何评估它?

我希望pow函数将pow(-1,1.2)识别为((-1)^ 6)^(1/5).但事实并非如此.

有谁知道会识别这些的c ++库吗?也许某人有他们可以分享的分解程序.

Sve*_*ach 11

数学上,pow(-1, 1.2)根本没有定义.没有负数的小数指数的幂,我希望没有库只会为这样的表达式返回一些仲裁值.你也会期待像这样的事情

pow(-1, 0.5) = ((-1)^2)^(1/4) = 1
Run Code Online (Sandbox Code Playgroud)

这显然是不可取的.

而且,浮点数1.2甚至不等于6/5.最接近的双精度数1.2是

1.1999999999999999555910790149937383830547332763671875
Run Code Online (Sandbox Code Playgroud)

鉴于此,您现在期望得到什么结果pow(-1, 1.2)?

  • cpow(-1,1.2)是-0.809 - 0.588j,或多或少. (3认同)
  • @Misha:这是另一个法律结果.基本上,`exp(1.2*(Log(1.2)+ 2*pi*k))```Log`是[复数对数的主值](http://en.wikipedia.org/wiki/Complex_logarithm# Definition_of_principal_value)和`k`是任意整数是有效结果.对于此示例,总共有5种不同的结果.设置`k = 2`将给出1. (2认同)

dus*_*uff 9

如果你想将负数增加到权力 - 特别是分数权力 - 使用该cpow()方法.您需要包含<complex>才能使用它.