doubleToLongBits介绍

IEEE二进制浮点数算术标准(IEEE754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。

在这里插入图片描述
public static long doubleToLongBits(double value);

//源码
public static long doubleToLongBits(double value) {
        long result = doubleToRawLongBits(value);
        // Check for NaN based on values of bit fields, maximum
        // exponent and nonzero significand.
        if ( ((result & DoubleConsts.EXP_BIT_MASK) ==
              DoubleConsts.EXP_BIT_MASK) &&
             (result & DoubleConsts.SIGNIF_BIT_MASK) != 0L)
            result = 0x7ff8000000000000L;
        return result;
    }

根据 IEEE 754 浮点双精度格式 (“double format”) 位布局,返回指定浮点值的表示形式
如果参数是正无穷大,则结果为 0x7ff0000000000000L
如果参数是负无穷大,则结果为 0xfff0000000000000L
如果参数是 NaN,则结果为 0x7ff8000000000000L
在所有情况下,结果都是一个 long 整数
将其赋予 longBitsToDouble(long) 方法将生成一个与 doubleToLongBits 的参数相同的浮点值
(所有 NaN 值被压缩成一个“规范”NaN 值时除外)
也就是NaN的处理不一样,此方法将NaN全部规范化为指定固定的值

简单来说就是你提供一个双精度浮点数,他会用64位二进制表示,如上图符号占1位,指数占11位,尾数占52位。
然后将这个64位的二进制数用long型表示,我们通过long型数值的大小来比较两个浮点数的大小。
通过这个方法有一个缺点就是取值范围,当你提供的浮点数转成二进制后,如果超过了指定的位置就无法比较大小了(单精度32位,双精度64位)

public class Test {
	public static void main(String[] args) {
		double a = 0.0022001;
		double b = 0.0022;
		System.out.println("a:" + Double.doubleToLongBits(a));
		System.out.println("b:" + Double.doubleToLongBits(b));
		System.out.println(Double.doubleToLongBits(a) == Double.doubleToLongBits(b));
		
		
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值