「java中浮点型的精度」java单精度浮点数和双精度浮点数
今天给各位分享java中浮点型的精度的知识,其中也会对java单精度浮点数和双精度浮点数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、Java语言中的浮点型数据的float和double的单精度和双精度到底是啥意思?
- 2、java 浮点数为什么精度会丢失
- 3、Java浮点数为什么精度会丢失
- 4、关于java的浮点类型: double 和 float 单精度和双精度的区别在哪里?
Java语言中的浮点型数据的float和double的单精度和双精度到底是啥意思?
主要有下面几个区别,手册上的,希望能帮到你
1、变量类型不同
float属于单精度型浮点数据。
double属于双精度型浮点数据。
2、指数范围不同
float的指数范围为-127~128。
double而double的指数范围为-1023~1024
3、表达式指数位不同
float的表达式为1bit(符号位)+8bits(指数位)+23bits(尾数位)
double的表达式为1bit(符号位)+ 11bits(指数位)+ 52bits(尾数位)
4、占用内存空间不同
float占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38。
double占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。
5、有效位数不同
float只能提供七位有效数字。
double可提供16位有效数字。
java 浮点数为什么精度会丢失
并不是java的浮点数精度会丢失,而是所有用二进制存储中的浮点数都可能会精度丢失(部分特殊的小数数值可以精确表示),所以计算机中存储的浮点数都存在精度丢失的风险,不过一边这个丢失的精度对我们正常的使用不会构成影响。
小数在转换为二进制时并不一定能用一个精确的二进制表示,大多数时候都是取的一个近似值,这就造成了精度的丢失。如果再用这个二进制进行计算,明显计算结果的精度会进一步丢失。
举个简单的例子把0.1用二进制表示(小数与二进制转换方法)
(1) 0.1 x 2 = 0.2 取整数位 0 得 0.0
(2) 0.2 x 2 = 0.4 取整数位 0 得 0.00
(3) 0.4 x 2 = 0.8 取整数位 0 得 0.000
(4) 0.8 x 2 = 1.6 取整数位 1 得 0.0001
(5) 0.6 x 2 = 0.2 取整数位 1 得 0.00011
(6) 0.2 x 2 = 0.4 取整数位 0 得 0.000110
(7) 0.4 x 2 = 0.8 取整数位 0 得 0.0001100
(8) 0.8 x 2 = 1.6 取整数位 1 得 0.00011001
(9) 0.6 x 2 = 1.2 取整数位 1 得 0.000110011
(n) ...
得到一个无限循环的二进制小数 0.000110011…,没办法用一个精确的二进制表示0.1。而且计算机中存储一个浮点数所用的位数也是有限的,所以只能选择在某一个精度进行保存。
当然也有特殊的小数,比如0.25的二进制为0.01
附:代码之谜(五)- 浮点数(谁偷了你的精度?)
Java浮点数为什么精度会丢失
int是整型,用来表示整数,其值是精确值。
float是浮点型,用来表示实数,其值是近似值。
所以当int转换为float时,是由准确值变成了近似值,所以会丢失精度。
比如int 的1000,转换为浮点型时,可能会被存成1000.00000000001,用来计算或者输出时看不出区别,实际上是已经有变化了。
在32位和64位的编译器中,int和float都是占四字节。
关于java的浮点类型: double 和 float 单精度和双精度的区别在哪里?
你想歪了,单双精度是指在内存中占用1、2个字节运行的意思。。。
float内存中占用1个字节,所以0.xxxxxxx总共有8位数字
double内存中占2个字节,一共有16位数字,所以精确度比float要高,但是占用内存大
java中浮点型的精度的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java单精度浮点数和双精度浮点数、java中浮点型的精度的信息别忘了在本站进行查找喔。
发布于:2022-12-27,除非注明,否则均为
原创文章,转载请注明出处。