Java中的正无穷,负无穷和非数

本文详细解析Java中正无穷(POSITIVE_INFINITY)、负无穷(NEGATIVE_INFINITY)及非数(NaN)的概念、获取方式与使用场景,深入理解Java浮点运算的异常处理。

正无穷(POSITIVE_INFINITY)负无穷(NEGATIVE_INFINITY)和非数(NaN)是java中三个特殊的浮点值,经常被用来表示异常


因为有两种浮点类型,所以具体的代码表示分别为:

Float型:Float.POSITIVE_INFINITY Float.NEGATIVE_INFINITY Float.NaN

Double型:Double.POSITIVE_INFINITY Double.NEGATIVE_INFINITY Double.NaN

它们之间有如下关系:

1.相同的无穷大之间是相等的,即负无穷和负无穷相等,正无穷和正无穷相等

2.非数和非数是不等的

其得到方式分别为:

1.    0.0/0.0或对负数开方得到非数

2. 只有浮点数除以0才能得到正无穷或负无穷(因为java语言的类型自动转换,执行这个算数表达式时,0会自动转换为浮点类型即0.0)

同理,若分母上是整型数值,分子上是浮点数0.0,也可得到正无穷或负无穷。但分子分母都是整数时,就会出现异常。

Java 中,我们通常采用值积分的方法来求解负无穷大积分。常见的方法包括换元法、分部积分法、辛普森法、梯形法等。以下是一个使用辛普森法计算 $0$ 到负无穷大的积分的 Java 代码示例: ```java import java.util.function.DoubleUnaryOperator; public class NegativeInfinityIntegral { public static double integrate(DoubleUnaryOperator f, double a, double eps) { double h = 1.0; double s = f.applyAsDouble(a); double s1, s2 = 0.0; int n = 1; do { h /= 2.0; s1 = 0.0; for (int k = 0; k < n; k++) { double x = a + (k + 0.5) * h; s1 += f.applyAsDouble(x); } s1 = (s + 2.0 * s1) * h / 3.0; n *= 2; s2 = (s + 2.0 * s1) * h / 3.0; } while (Math.abs(s2 - s1) > eps); return s2; } public static void main(String[] args) { DoubleUnaryOperator f = x -> Math.exp(-x * x); // 被积函 double a = 0.0; // 积分下限 double eps = 1e-6; // 精度要求 double result = integrate(f, a, eps); System.out.println(result); } } ``` 在这个例子中,我们使用了 Java 8 中的 `DoubleUnaryOperator` 接口来表示被积函。`integrate` 方法使用辛普森法来计算函积分,其中 `eps` 表示精度要求,`h` 表示每个小区间的长度,`s` 表示初始积分值,`s1` 表示每次迭代的新积分值,`s2` 表示最终的积分值。在 `main` 方法中,我们定义了被积函 `f`,并将其传递给 `integrate` 方法来计算积分结果。最后,我们将结果打印到控制台上。需要注意的是,这里使用了一个比较简单的例子,对于复杂的函积分,可能需要采用更加精细的算法来求解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值