Java 中float 、double的精度问题: float 、double取值范围是怎么样计算出来的?

2024-05-07 13:04

1. Java 中float 、double的精度问题: float 、double取值范围是怎么样计算出来的?

float和double都是遵循IEEE754标准的,内存单元里都是划分为三部分的:符号位   阶码   尾数。
其中
float的符号位占一位,阶码为8位,尾数为23位,所以一共四个字节;double的符号位占一位,阶码为11位,尾数52位。符号位为0的话说明是
正的,为1的话说明是负的;阶码就是尾数所要乘以的2的次方数;尾数默认是去掉整数位的1的,也就是说加入尾数序列为01010101(后面还有很多),
那么其实它是1.01010101(后面还有很多)。比如一个float类型的变量,其符号位为0,阶码化成十进制为3,尾数为01000000(后面都是0),那
么这个变量化为十进制的话就是1.25*(2^3)=10。
int类型占四个字节,但是它不是像float那样表示的,int除了符号位之外其他位都是表示数值的,没有表示阶码的,所以它的范围比float小很多。
下面是维基百科上的一点解释,可以参考一下。

http://zh.wikipedia.org/zh-cn/IEEE_754
不清楚的话还是先看看计算机原理的书或者追问,希望有帮助~

Java 中float 、double的精度问题: float 、double取值范围是怎么样计算出来的?

2. java中float和double是多少位浮点数

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

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

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

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是浮点数的数值范围。

对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)

3. JAVA中float和double的区别?

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

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

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

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是浮点数的数值范围。

对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

JAVA中float和double的区别?

4. float和double的取值范围是怎么计算出来的?

float和double的范围是由指数的位数来决定的。
  float的指数位有8位,而double的指数位有11位,分布如下:
  float:
  1bit(符号位) 8bits(指数位) 23bits(尾数位)
  double:
  1bit(符号位) 11bits(指数位) 52bits(尾数位)
于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;
double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

5. java float和double的区别

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

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

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

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是浮点数的数值范围。

对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

java float和double的区别

6. java中float和double的区别

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

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

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

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是浮点数的数值范围。

对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

7. float double取值范围是多少

1、Float:比特数为32,有效数字为6-7,数值范围为 -3.4E+38 和 3.4E+38
2、Double:比特数为64,有效数字为15-16,数值范围为-1.7E-308~1.7E+308
可根据应用程序的需求将浮点变量声明为 float 或 double。这两种类型之间的主要差异在于它们可表示的基数、它们需要的存储以及它们的范围。

扩展资料
浮点型的两种类型
1、单精度浮点型(float)
单精度浮点型(float )专指占用32位存储空间的单精度(single-precision )值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。
例如,当表示美元和分时,单精度浮点型是有用的。
这是一些声明单精度浮点型变量的例子:float hightemp,lowtemp;
2、双精度型(double )浮点型
双精度型,正如它的关键字“double ”表示的,占用64位的存储空间。在一些现代的被优化用来进行高速数学计算的处理器上双精度型实际上比单精度的快。
所有超出人类经验的数学函数,如sin( ),cos( ) ,tan()和sqrt( )均返回双精度的值。当你需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。
参考资料来源:百度百科—FLOAT 
参考资料来源:百度百科—DOUBLE

float double取值范围是多少

8. java中double和float的区别

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

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

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

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是浮点数的数值范围。

对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,java语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。