检查^ b是否是复数

时间:2014-11-20 16:16:20

标签: c++ math complex-numbers

考虑到我a ^ b两者都是实数,ab的值我将有一个复杂的答案$(m + n * i)$。

我发现有一个案例是以下情况:

a<0b = (2*k+1)/(2n); k in Zn in N

任何想法如何在C ++中实现?

P.S。 ^ - 是力量。

1 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,由于round-off errors,检查计算机中数字的合理表示几乎是不可能的。你可以解决它,但也许你可以忽略负数的特殊情况?

取幂的一个定义是负数不能被提升到任何幂(根据这个定义,( - 1)^ 2不存在)。用C ++表达:

bool can_has_power(double a, double b)
{
    if (a < 0)
        return false;
    else if (a == 0)
        return b != 0;
    else
        return true;
}

也许你想允许整数幂的特殊情况?这里:

bool can_has_power(double a, double b)
{
    if (a < 0)
        return fmod(b, 1) == 0;
    else if (a == 0)
        return b != 0;
    else
        return true;
}

这里有一些额外的考虑因素,你可能会觉得很有启发性。计算机中的非整数通常使用floating-pointfixed-point编码表示。这两个系统都将数字表示为一个比例,其示例为2的幂;例如:

b = m / n; n = 2^52

在此表示中,所有非整数数字具有奇数分子甚至分母!如果您在假设程序中使用b = 1/7,则精确值1/7将四舍五入为643371375338642/2^52,根据有理数的规则,必须通过GCD调整分子和分母:321685687669321/2^51。如果使用指数定义,那么 no 负数可以提升为任何非整数幂!