复数的大小

时间:2014-01-27 11:17:13

标签: java complex-numbers sqrt

我正在开发一个处理复杂数字的项目,以解释更多(a + bi),其中“ a ”是复数的真实部分而“ b ”是它的虚构部分。 (a和b是实数,但“i”不是)

我很难实现幅度方法,而不是将实数作为 double 返回 infinity

这是我正在尝试实施的:| (a + bi)| =√(a ^ 2 + b ^ 2)

我的代码片段

public double mag(){
    /**
     * Compute the magnitude of this complex number.
     * 
     */
    //final double re is the real part
    //final double I'm is the imaginary part 
    double mag = Math.sqrt(Math.pow(this.re, 2) + Math.pow(this.im, 2));

    return mag;
}

说,如果实数和虚数都是Double.MAX_VALUE。为什么mag会返回无穷大而不是1.8961503816218352E154?

3 个答案:

答案 0 :(得分:2)

无穷大数字是大于Double.MAX_VALUE或小于-Double.MAX_VALUE的数字。 1.0 / 0.0是无限的。那么是2 * Double.MAX_VALUE。

Math.pow(Double.MAX_VALUE,2)明显大于Double.MAX_VALUE。最大可能数的平方将导致常规数字系统无法表示的内容。

Math.sqrt(Math.pow(this.re, 2) + Math.pow(this.im, 2))
==> Math.sqrt(Math.pow(Double.MAX_VALUE, 2) + Math.pow(Double.MAX_VALUE, 2))
==> Math.sqrt(Infinity + Infinity)
==> Infinity

在计算sqrt之前,double max值的平方导致无穷大。你无法找到无穷大数字的sqrt,所以你得到它完全有效。

答案 1 :(得分:0)

如果值超过Double.Max_value,则

表示双值,然后返回infinity。正如另一个答案在您的情况中所示,它将返回infinity。所以对于非常大的数字,你不能做简单的数学运算。最好使用BigDecimal进行此类操作。

答案 2 :(得分:0)

要返回1.8961503816218352E154 这样做

    public double mag() {

     double x = this.re;
     double y = this.im;
     return Math.hypot(x, y);

}