java - 复数的大小

标签 java complex-numbers sqrt

我正在开发一个处理复数的项目,以解释更多(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/

相关文章:

java - 避免在android中使用非常量表达式

复杂随机点生成

c - 具有 sqrt 、abs 和 c 上的导数的方程

c - sqrt 仅在参数为非负时定义

delphi - Delphi 和 Free Pascal 中的 SQRT 函数的准确度如何?

java - 杂交 : How to import using impex?

java - 创建传递的 Class.class 参数的新实例

java - Kotlin 应用程序中的 Stripe 集成 -- IllegalStateException

r - 使用 ggplot2 在 R 中绘制复数

python - 如何计算复数的模数?