我正在开发一个处理复数的项目,以解释更多(a + bi),其中“a”是复数的实部“b”是它的虚部。 (a 和 b 是实数,但“i”不是)
我很难实现幅度方法,而不是返回一个 double 实数,我得到无穷大 .
这就是我正在尝试实现的:| (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 ?
最佳答案
无穷大数字是大于 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 之前,双最大值的平方结果为无穷大。你找不到无穷大数的 sqrt,所以你得到的结果完全有效。
关于java - 复数的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21379450/