`

Java中涉及正无穷、负无穷 、NaN的算术运算测试

    博客分类:
  • Java
阅读更多

Java中含有正无穷(Double.POSITIVE_INFINITY = 1.0 / 0.0)、负无穷(Double.NEGATIVE_INFINITY = -1.0 / 0.0)和非数字(Double.NaN = 0.0d / 0.0)的定义,这些定义都是Double类中的静态常量,如果在我们的一般的算术运算中加入了这些常量,那么算术的结果是否符合数学上的正确性呢?测试代码如下:

	double a = Double.POSITIVE_INFINITY;
		System.out.println("a="+a);
		System.out.println("a+100.0=" + (a + 100.0));
		System.out.println("a+Double.MAX_VALUE=" + (a + Double.MAX_VALUE));
		System.out.println("a - Double.MAX_VALUE=" + (a - Double.MAX_VALUE));
		System.out.println("-a=" + (-a));
		System.out.println("a - a=" + (a - a));
		
		System.out.println("NaN+100=" + (Double.NaN+100));
		System.out.println("NaN==NaN="+(Double.NaN==Double.NaN));
		System.out.println("NaN+Double.MAX_VALUE=" + (Double.NaN+Double.MAX_VALUE));
		System.out.println("NaN<Double.MAX_VALUE="+(Double.NaN<Double.MAX_VALUE));
		System.out.println("NaN>Double.MAX_VALUE="+(Double.NaN>Double.MAX_VALUE));
		System.out.println("NaN==Double.MAX_VALUE="+(Double.NaN==Double.MAX_VALUE));
		System.out.println("a == a=" + (a == a));
		System.out.println("100 < a=" + (100 < a));
		System.out.println("-a < 0=" + (-a < 0));
		System.out.println("Double.MAX_VALUE < a=" + (Double.MAX_VALUE < a));

 输出结果为:

a=Infinity
a+100.0=Infinity
a+Double.MAX_VALUE=Infinity
a - Double.MAX_VALUE=Infinity
-a=-Infinity
a - a=NaN
NaN+100=NaN
NaN==NaN=false
NaN+Double.MAX_VALUE=NaN
NaN<Double.MAX_VALUE=false
NaN>Double.MAX_VALUE=false
NaN==Double.MAX_VALUE=false
a == a=true
100 < a=true
-a < 0=true
Double.MAX_VALUE < a=true

 结论:

(1)正无穷和负无穷仍然保持数学上的定义;

(2)NaN是非数字,参与算术运算都为NaN,与其他数字比较结果都为false(包括自己)。

 

2
2
分享到:
评论

相关推荐

    4.15实验-浮点数的表示及运算

    1. 符号位:1位用于表示浮点数的正负,0代表正,1代表负。 2. 指数:通常用二进制补码表示,用于存储指数值。例如,8位指数字段可以表示从-127到127的十进制指数。 3. 尾数:也称为小数部分,存储浮点数的小数部分...

    第二章电子计算机中信息的表示及其运算.ppt

    此外,还有特殊值如正无穷、负无穷和非数字(NaN)的表示。 计算机还处理各种数据类型,如整型、浮点型、字符型等,每种数据类型都有其特定的存储方式和运算规则。例如,整型可能使用补码、原码或反码表示,浮点型...

    IEEE 754-2008 浮点算术标准(英文原版PDF)

    IEEE 754-2008 规定了浮点数的基本算术运算,包括加法、减法、乘法、除法等,并且明确了运算过程中可能遇到的各种异常情况及其处理方式。 - **四舍五入规则**:IEEE 754-2008 支持四种不同的四舍五入模式: - 向...

    IEEE standard for binary floating-point arithmetic英文版.zip

    5. **特殊值处理**:标准规定了几个特殊值的表示,如无穷大(正无穷和负无穷)、不是数(NaN)以及零(正零和负零)。这些特殊值的处理在运算中至关重要,比如除以零会产生无穷大,而错误的计算则可能产生NaN。 6. ...

    java数值计算

    在实际应用中,理解IEEE特殊值如无穷大、负无穷大、NaN(Not a Number)以及异常处理机制,对于避免计算错误和提高代码的健壮性至关重要。例如,当执行可能产生下溢的计算时,了解下溢阈值和处理策略(如渐进下溢)...

    Java语言程序设计实用教程类型与运算符PPT教案学习.pptx

    Java中的浮点数可以表示特殊值,如正无穷大(Double.POSITIVE_INFINITY)、负无穷大(Double.NEGATIVE_INFINITY)和非数字(Double.NaN)。这些值通常在数学运算中出现溢出或错误时产生。 总的来说,理解和掌握...

    浅谈C#中的Infinity和NaN

    在C#编程语言中,`double`和`float`数据类型是用于表示浮点数的,它们遵循IEEE 754标准,这个标准定义了如何处理浮点计算中的特殊情况,如正无穷大(`Infinity`)、负无穷大(-`Infinity`)以及非数字(`NaN`)。...

    浮点运算 手册 英文版

    - **舍入方式**:包括向最接近的数四舍五入、向0舍入、向正无穷舍入、向负无穷舍入等。 - **异常处理**:当浮点运算结果超出正常范围时(如除以0),会触发异常,可以通过设置不同的异常处理模式来控制这些情况下的...

    Java运算符.docx

    对于浮点数除法,有三种特殊结果:正数除以0得到正无穷,负数除以0得到负无穷,0除以0得到NaN。取余运算符`%`用于求两数相除后的余数。自增`++`和自减`--`有两种形式:前缀和后缀。前缀操作会先改变变量值再参与运算...

    IEEE Standard for Floating-Point Arithmetic

    - **无穷大**:表示超出表示范围的最大值,有两种形式:正无穷大和负无穷大。 - **NaN**:用于表示未定义或不确定的计算结果,如无穷大与无穷大的相加或相减等。 - **负零**:虽然在数学上零没有正负之分,但在...

    实验一MATLAB环境的熟悉与基本运算.docx

    | -Inf | 表示负无穷大 | | NaN | 表示不是一个数字 | | eps | 表示浮点数的相对误差 | 五、MATLAB 的算术运算符: | 运算符 | 描述 | | --- | --- | | + | 加法 | | - | 减法 | | \* | 乘法 | | / | 除法 | | ^ |...

    浮点数IEEE754标准

    为了处理运算过程中的舍入问题,标准规定了几种不同的舍入模式,如最接近(向最近的方向舍入),向零舍入(舍入时向零的方向靠拢),向正无穷舍入和向负无穷舍入。 除了正常的浮点数,IEEE 754还定义了特殊数值,...

    VLSI设计综合实践

    NaN值用于表示非法运算的结果,例如正无穷加上负无穷。 精度方面,正常单精度浮点数至少准确到小数点后六位,有时可达到九位;正常双精度浮点数至少准确到小数点后15位,有时可达17位。这些精度的保证对于科学计算...

    ieee-std-754-2008.pdf

    例如,除以零可以产生正无穷或负无穷;溢出可以产生无穷或最大/最小有限值;下溢则可以采取梯度下溢(gradual underflow)策略,以保持计算连续性。 五、向量运算和并行计算支持 随着并行计算的发展,IEEE 754-...

    运算符表达式和流程控制PPT学习教案.pptx

    注意,零不能作为整数除数,但可以作为浮点数除数,除以零会有特殊的结果,如正无穷、负无穷或NaN。 2. **自增和自减运算符**:`++` 和 `--` 分为前缀和后缀两种形式。前缀运算符会在使用变量之前增加或减少其值,...

    ieee-754-multiplier vhdl 乘法器

    3. **指数处理**:将两个浮点数的指数相加,但需要注意处理溢出情况,因为IEEE 754允许指数为正无穷大或负无穷大。 4. **规格化**:检查乘积的尾数是否需要左移,以保持其前导零最小化。同时更新指数以反映这个左移...

    高级浮点除法器的fpga实现

    5. **异常处理**:在浮点运算过程中可能会遇到各种异常,如溢出、下溢、非数字(NaN)和无穷大。对于这些情况,需要设置特定的硬件逻辑来处理。 在VHDL中实现高精度快速除法,关键在于设计高效的算法和优化逻辑。...

    Delphi Math单元函数.doc

    非正规的浮点数、正无穷大和负无穷大也是数学运算中常见的特殊值,它们分别由NaN(非数)、Infinity(正无穷大)和NegInfinity(负无穷大)表示。 三角函数是Math单元的核心部分,包括: 1. ArcCos(const X: ...

    浮点乘法verilog设计

    在Verilog中,我们可以设计出硬件电路来执行浮点乘法运算,这通常涉及到复杂的逻辑和算术操作。 浮点格式遵循IEEE754标准,这是一种国际标准,定义了浮点数如何在二进制系统中表示和运算。该标准包括单精度(32位)...

Global site tag (gtag.js) - Google Analytics