本文共 942 字,大约阅读时间需要 3 分钟。
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。float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。博主测试:
1
23456789101112131415public class TestFloat : MonoBehaviour {public float f = 0f;public double f2 = 0f;// Use this for initializationvoid Start () { f = 123456700.987654321f;//89换成00则不会进行四舍五入 f2 = 123456789.987654321d;//如果是f就成单精度的了 Debug.Log (f); Debug.Log (f2);}
本文转自jiahuafu博客园博客,原文链接如需转载请自行联系原作者
jiahuafu