导航:首页 > 编程语言 > java浮点数比较

java浮点数比较

发布时间:2022-05-07 12:54:58

‘壹’ java中的浮点数范围及IEEE 754标准中的规定是否相同,为什么

相同,JAVA遵循IEEE754。
0x7f800000应该定义为正无穷大,
java.lang.Float中用public static final float POSITIVE_INFINITY 定义。
按IEEE754,实际值大概是
0x7f800000
S' E'(移码) D'
0 1111 1111 000 0000 0000 0000 0000 0000
S E(符号取反的补码) D
+1 0 111 1111 1.000 0000 0000 0000 0000 0000
S ES ED D
+1 0 111 1111 1.000 0000 0000 0000 0000 0000
Data = S*D*(2^E) = (+1)*1.0*(2^127) = 2^127

‘贰’ 浮点数因截断误差不能精确比较,为何java里有时可以有时不可以

可以乘以10 变为整数循环

‘叁’ 为什么说Java的浮点运算危害了普天下的芸芸众生

JAVA在基本 float 类型和包装类 Float 之间,用于比较 NaN 和 -0 的规则是不同的。对于 float 值,比较两个 NaN 值是否相等将会得到 false ,而使用 Float.equals() 来比较两个 NaN Float 对象会得到 true 。造成这种现象的原因是,如果不这样的话,就不可能将 NaN Float 对象用作 HashMap 中的键。类似的,虽然 0 和 -0 在表示为浮点值时,被认为是相等的,但使用 Float.compareTo() 来比较作为 Float 对象的 0 和 -0 时,会显示 -0 小于 0 。
由于无穷大、NaN 和 0 的特殊行为,当应用浮点数时,可能看似无害的转换和优化实际上是不正确的。例如,虽然好象 0.0-f 很明显等于 -f ,但当 f 为 0 时,这是不正确的。还有其它类似的 gotcha。
浮点运算很少是精确的。虽然一些数字(譬如 0.5 )可以精确地表示为二进制(底数 2)小数(因为 0.5 等于 2 -1),但其它一些数字(譬如 0.1 )就不能精确的表示。因此,浮点运算可能导致舍入误差,产生的结果接近【但不等于】您可能希望的结果。
不要用浮点值表示精确值,一些非整数值(如几元和几分这样的小数)需要很精确。浮点数不是精确值,所以使用它们会导致舍入误差。因此,使用浮点数来试图表示象货币量这样的精确数量不是一个好的想法。使用浮点数来进行美元和美分计算会得到灾难性的后果。浮点数最好用来表示象测量值这类数值,这类值从一开始就不怎么精确。

‘肆’ JAVA中怎么判断两个浮点数相等

一般情况下: 浮点数的相等 ,可以使用 == 进行比较 . 但是浮点数, 毕竟涉及到精度问题, 如果要考虑精度的问题 ,那么可以使用BigDecimal 类

参考代码

publicclassTest{
publicstaticvoidmain(String[]args){
System.out.println(0.1*3==0.3);//false
System.out.println(0.1*3);//0.30000000000000004
System.out.println(0.3d);//0.3

BigDecimalb1=newBigDecimal("0.1");
BigDecimalb2=newBigDecimal("3");
BigDecimalb3=newBigDecimal("0.3");
BigDecimalb4=b1.multiply(b2);//乘法
if(b4.compareTo(b3)==0){//如果两者比较结果为0,那么就是相等
System.out.println("相等");
}else{
System.out.println("不等");
}
}
}

‘伍’ JAVA关于浮点数比较的问题

因为浮点数在java中是不精确的,比如double d=2.01,你打印出来也是2.01,但是实际上java虚拟机存储的是2.010000000001这个数,java的浮点数不能存储精确的小数点

‘陆’ java中float和double的区别...

1、内存结构
float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位)
8bits(指数位)
23bits(尾数位)
double:
1bit(符号位)
11bits(指数位)
52bits(尾数位)
于是,float的指数范围为-128~+127,而double的指数范围为-1024~+1023,并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128
~
+2^127,也即-3.40E+38
~
+3.40E+38;double的范围为-2^1024
~
+2^1023,也即-1.79E+308
~
+1.79E+308。
2.
精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23
=
8388608,一共七位,由于最左为1的一位省略了,这意味着最多能表示8位数:
2*8388608
=
16777216
。有8位有效数字,但绝对能保证的为7位,也即
float的精度为7~8位有效数字
double:2^52
=
4503599627370496,一共16位,同理,
double的精度为16~17位
之所以不能用f1==f2来判断两个数相等,是因为虽然f1和f2在可能是两个不同的数字,但是受到浮点数表示精度的限制,有可能会错误的判断两个数相等!

‘柒’ java如何判断两个float怎么比大小

浮点数判断需要注意,float 和double 的精度范围,超过范围的数字会被忽略
(1) 浮点数大小判断
如果没有等号关系在里面,也就必然一大一小,那么直接用 > 或者 <

(2) 浮点数相等判断
因为 浮点数在内存中存放,可能无法精确的储存,所以同一个值,可能有不同的内存数据,所以要使用以下的方法:
以float 为例,32位APP中精度为 6-7,所以取 1e-7。
两个数字 A 、 B,
if ( |A-B| <1e-7 ) 则 A、B相等。

‘捌’ java里的浮点数是什么意思

float表示单精度浮点数在机内占4个字节,用32位二进制描述。

浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占1位二进制,表示数的正负。
指数符占1位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx,但不存开头的0和点
指数存指数的有效数字。

指数占多少位,尾数占多少位,由计算机系统决定。
可能是数符加尾数占24位,指数符加指数占8位 -- float.

‘玖’ java 的浮点数&整数

浮点数多数不能精确表示。
近似相等可以用两数差的绝对值小于某个足够小的数来判定。

‘拾’ java中如何判断一个浮点数是float型的还是double的

java中常量
的浮点数字就被认为是double型的,而且不能直接赋给float型的变量。。像float
a=1.2;
这样的编绎直接出错。。要写成float
a=1.2f;
才行。

阅读全文

与java浮点数比较相关的资料

热点内容
linux蓝牙连接 浏览:898
安卓qq邮箱格式怎么写 浏览:429
如何电信租用服务器吗 浏览:188
编程中计算根号的思维 浏览:181
可爱的程序员16集背景音乐 浏览:446
软件代码内容转换加密 浏览:795
什么app看电视不要钱的 浏览:16
乌班图怎么安装c语言编译器 浏览:278
plc通讯块编程 浏览:923
我的世界服务器怎么清地皮 浏览:421
ftp服务器如何批量改名 浏览:314
网易我的世界服务器成员如何传送 浏览:268
公司云服务器远程访问 浏览:633
法哲学pdf 浏览:637
清大阅读app是什么 浏览:447
怎么用qq浏览器整体解压文件 浏览:586
肺组织压缩15 浏览:270
安卓手机为什么换电话卡没反应 浏览:797
诸子集成pdf 浏览:339
php注册框代码 浏览:718