
float变量问题
float为单精度浮点变量我实践中得知12.123456整数部分超出第三位小数部分的第六位就会开始不准确了例如123.12345?整数部分超出第四位小数部分的第五位就会开...
float为单精度 浮点变量 我实践中 得知12.123456
整数部分超出第三位 小数部分的第六位就会开始不准确了 例如123.12345?
整数部分超出第四位 小数部分的第五位就会开始不准确了 例如123.1234??
只有保留两个整数 不超出两个 小数部分才没有任何异常
另外 小数部分 如果超出6位 去到7位 则会按照第7位的数字大小 而将第六位四舍五入
我想问 为何会这样呢 有人说 编译器 是最好的老师 这都是我从编译器得出的结果 展开
整数部分超出第三位 小数部分的第六位就会开始不准确了 例如123.12345?
整数部分超出第四位 小数部分的第五位就会开始不准确了 例如123.1234??
只有保留两个整数 不超出两个 小数部分才没有任何异常
另外 小数部分 如果超出6位 去到7位 则会按照第7位的数字大小 而将第六位四舍五入
我想问 为何会这样呢 有人说 编译器 是最好的老师 这都是我从编译器得出的结果 展开
3个回答
展开全部
这是因为:
float 命令会为你的数字去占用4个字节的内存,4个字节也就是32位0,1码(每字节是8位)
这样分:
0 00000000 00000000000000000000000
第一位保存的是符号位,正为0,负为1;
后面的8个0,是指数位。可表示的范围是:0-255或者-126-128
在后面的23个0,是小数位。可表示: 2*2^23个有效数字。
所以float的可表示范围是:
2*2^-126 ~2*2^128 = -1.20 × 10^38 到 +3.4 × 10^38
最大可表示数的数量是:2*2^23=8388608个
以10为底的对数为(这一步是看它在10进制能表示最高的指数):
lg(2*2^23)=6.92,所以有效数字为6-7位,在其范围外,所有的数字将变的不稳定
所以是通过他的属性来推出的结论。
float 命令会为你的数字去占用4个字节的内存,4个字节也就是32位0,1码(每字节是8位)
这样分:
0 00000000 00000000000000000000000
第一位保存的是符号位,正为0,负为1;
后面的8个0,是指数位。可表示的范围是:0-255或者-126-128
在后面的23个0,是小数位。可表示: 2*2^23个有效数字。
所以float的可表示范围是:
2*2^-126 ~2*2^128 = -1.20 × 10^38 到 +3.4 × 10^38
最大可表示数的数量是:2*2^23=8388608个
以10为底的对数为(这一步是看它在10进制能表示最高的指数):
lg(2*2^23)=6.92,所以有效数字为6-7位,在其范围外,所有的数字将变的不稳定
所以是通过他的属性来推出的结论。
追问
我想问 10^2 是10的二次方 即是10*10的意思吗 我数学比较差
那 3.14e2 到底是3.14*3.14 还是3.14*100呢
追答
对。^就是后面为指数。
3.14e2 是科学计数法,代表的是 3.14*10^2
展开全部
float 只保证结果为 7 位有效,所以在 7 位以后出现什么数字都是可能的;
你要是需要可以用double型的呀,那样一般就不会出问题了。
你要是需要可以用double型的呀,那样一般就不会出问题了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额,因为float类型的数值的精确位数是有限的(各个版本的编译器的限定不一样),有的可能是精确到6~7位等,而具体就是从左边算起吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询