
float是单精度类型,精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间
double是双精度类型,精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8个字节的存储空间
当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f
例如:float a=13;
则会提示不能将double转化成float 这成为窄型转化
如果要用float来修饰的话,则应该使用float a=13f
注意float是6位有效数字,第7位数字将会产生四舍五入
所以如果一个float变量 这样定义: float a=132344435; 则第7位将产生四舍五入(5及5以下的都将舍去)
int和long都是用32位来存储最大值和最小值分别为2147483647(109), -2147483648;
long long 是用64位来存储最大值和最小值分别为9223372036854775807(1018),-9223372036854775808;
float的最大值和最小值分别为340282e+038(1038),117549e-038(10-38);
double的最大值和最小值分别为179769e+308(10308),222507e-308(10-308)
1、因为double类型是浮点数,这种类型可以用科学记数法表示,所以表示范围非常大。但是,使用可浮点数的代价就是损失了精度。它把这部分精度用于指数的表示。所以double类型的优点就是数据范围大,缺点是精度不足,大概只有15~16位有效位数。2、浮点数类型及其数值范围: 类型 比特数 有效数字 数值范围 float 类型 32 6-7 -3410(-38)~3410(38) double类型 64 15-16 -1710(-308)~1710(308) long double类型 128 18-19 -1210(-4932)~1210(4932)
基本类型float占4个字节,二进制位数有32位,取值范围为[-340282346638528860e+38 , -140129846432481707e-45] ∪ [140129846432481707e-45 ~ 340282346638528860e+38]。
基本类型double占8个字节,二进制位数有64位,取值范围为[-179769313486231570e+308,-494065645841246544e-324] ∪ [494065645841246544e-324,179769313486231570e+308] 。
PS:其中e代表10的多少次方。
IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。
扩展资料:
Java有两种浮点数据类型,第一种float使用32 bit表示,对应单精度浮点数,运行速度相比double更快,占内存更小,但是当数值非常大或者非常小的时候会变得不精确。精度要求不高的时候可以使用float类型。double为64位表示,将浮点数赋给某个变量时,如果不字面值后面加f或者F,则默认为double类型。javalangMath中的函数都采用double类型。如果double和float都无法达到想要的精度,可以使用BigDecimal类。
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,也即-340E+38 ~ +340E+38;
double的范围为-2^1024 ~ +2^1024,也即-179E+308 ~ +179E+308。
此说法正确:
这个是科学计数法,E308表示10的308次方
179E308也就是179乘以10的308次方
关于位存储:
比如1位,只能表示0和1,所以1位最大值1
比如2位,0到3,所以最大值3
关于long:
long共64位其中1位是符号位正负,剩余63位,
表示最大数 2^63-1 =9223372036854775807
long用途:
十进制就有19位,如果你的订单低于19位就能使用long来存储。
问题:
double为什么表示的整数比long大,都是64位啊
原来double,把64位划分了几个 部分,
1、有符号位,指数位,尾数位,通过降低精确度存储更大的数字。
2、尾数52位存储具体数字,指数11位和小数点位置有关,符号位1位代表正负
3、如果整数,你的数超过2^52,double就不精确了,开始舍弃精度
4、如果小数,小数点后边的数超过2^52,double就不精确了,开始舍弃精度
double的应用:
只是提供了小数支持,小数精确到16位左右。也能存储整数。
但是整数精确只能表示2^52以内的数,超过就不精确了。
所以19位以内的整数可以用long,16以内的小数和整数用double
double型取值范围 查你的编译器的头文件 FLOATH
#define DBL_EPSILON 22204460492503131e-016 -- 最小分辨率
#define DBL_MAX 17976931348623158e+308 -- 最大值
随编译器和机器而变。
程序运算过程中的范围有限制。例如 ii 允许的 i 就很小了。
同样,double 运算,也会缩小 a 的允许范围。
一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)
1、符号位最高位也就是第31位表示这个实数是正数还是负数,为0表示正数或0,为1表示负数
2、阶码第30位到第23位这8个二进制位表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和即所谓阶码
规格化的二进制实数的指数只能在-127----+127之间,所以,一个float型数的最大值在+2^127即+3410^38,最小值在-2^127即-3410^38
3、尾数其他最低的23位即第22位到第0位表示该实数转化为规格化的二进制实数后小数点以后的其余各位即所谓尾数
Double的计算与此类似,double的符号位为63位,指数为62~52位,共11位表示的范围为-1024~1023尾数为51~0表示的范围为-1710^308~+1710^308
float:占四个字节,3410(-38)---3410(38);
double:占八个字节,
1710(-308)---1710(308);
longdouble型的范围和double都是八个字节,范围相同。
上面的括号表示幂运算。
以上就是关于c#中,double和float的范围是多少double的范围包含了int的范围吗全部的内容,包括:c#中,double和float的范围是多少double的范围包含了int的范围吗、double的取值范围为什么那么大、Java中float和double的取值范围该怎样理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)