我正在开发一个处理复杂数字的项目,以解释更多(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?
答案 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);
}