float变量问题

float为单精度浮点变量我实践中得知12.123456整数部分超出第三位小数部分的第六位就会开始不准确了例如123.12345?整数部分超出第四位小数部分的第五位就会开... float为单精度 浮点变量 我实践中 得知12.123456
整数部分超出第三位 小数部分的第六位就会开始不准确了 例如123.12345?
整数部分超出第四位 小数部分的第五位就会开始不准确了 例如123.1234??
只有保留两个整数 不超出两个 小数部分才没有任何异常
另外 小数部分 如果超出6位 去到7位 则会按照第7位的数字大小 而将第六位四舍五入

我想问 为何会这样呢 有人说 编译器 是最好的老师 这都是我从编译器得出的结果
展开
 我来答
miniappfnqakqea3xq47
2011-06-21 · TA获得超过1103个赞
知道小有建树答主
回答量:450
采纳率:0%
帮助的人:331万
展开全部
这是因为:

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
dmeijuan
2011-06-21 · TA获得超过110个赞
知道答主
回答量:212
采纳率:0%
帮助的人:36.6万
展开全部
float 只保证结果为 7 位有效,所以在 7 位以后出现什么数字都是可能的;
你要是需要可以用double型的呀,那样一般就不会出问题了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
王chuan总
2011-06-21
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
额,因为float类型的数值的精确位数是有限的(各个版本的编译器的限定不一样),有的可能是精确到6~7位等,而具体就是从左边算起吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式