Java 中float 、double的精度问题:float 、double取值范围是怎么样计算出来的?
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/05 23:47:11
Java 中float 、double的精度问题:float 、double取值范围是怎么样计算出来的?
为什么int型也是占 4个字节,但取值范围是那么小的范围,
但是float也是占4 个字节,取值范围为什么就是那么大的?
为什么int型也是占 4个字节,但取值范围是那么小的范围,
但是float也是占4 个字节,取值范围为什么就是那么大的?
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小很多.
下面是维基百科上的一点解释,
不清楚的话还是先看看计算机原理的书或者追问,
其中
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小很多.
下面是维基百科上的一点解释,
不清楚的话还是先看看计算机原理的书或者追问,
Java 中float 、double的精度问题:float 、double取值范围是怎么样计算出来的?
FLOAT,DOUBLE的范围
float和double型数据的数值范围的求法
float变量取值范围的问题
double和float的取值在小数和整数部分都差多少?就是说float的小数到多少位,整数到多少,double是多少.
下面两个程序,关于float和double.为什么float的那个程序在后面要有(float),但double这个却不用
表达式18/4*sqrt(4.0)/8值的数据类型为什么是double而不是float.
如何确定float,double,longdouble型的数值范围,是怎么确定的呢?怎么算的呢?
以下的变量定义语句中,合法的是( ).A.float $_*5= 3.4F; B.double a =Double.MA
C语言中,double型数和float型数,的计算时间,分别大约是int型的多少倍啊(据说double是int的几百倍呢
JAVA中常见的数据类型有double ,int ,float 有food 这种类型吗,我看到一个语句不太明白
java、c 2.下列声明哪个是错误的()A int i = 10; B float f = 1.1;C double