float类型能精确表达整型数100亿和1000亿吗?
2013-04-17 16:30
465 查看
100亿:
100亿 = 10000000000
用 float 类型在内存中的表示为:0x501502F9
展开为二进制形式:0 10100000 00101010000001011111001
指数部分:10100000 = 160
还原为整型数:1.00101010000001011111001 * 2^(160-127)
= 1001010100000010111110010000000000 (二进制)
= 10000000000 (十进制)
1000亿:
1000亿 = 100000000000
用 float 类型在内存中的表示为:0x51BA43B7
展开为二进制形式:0 10100011 01110100100001110110111
指数部分:10100011 = 163
还原为整型数:1.01110100100001110110111 * 2^(163-127)
= 1011101001000011101101110000000000000 (二进制)
= 99999997952 (十进制)
结论:
1、 float类型能精确表达 100亿,不能精确表达 1000亿。
2、 float类型能表达的有效数字最小是 6-7位,最大未知。
3、 从 -16777216 到 16777216 之间的整数能被float类型精确表达。
100亿 = 10000000000
用 float 类型在内存中的表示为:0x501502F9
展开为二进制形式:0 10100000 00101010000001011111001
指数部分:10100000 = 160
还原为整型数:1.00101010000001011111001 * 2^(160-127)
= 1001010100000010111110010000000000 (二进制)
= 10000000000 (十进制)
1000亿:
1000亿 = 100000000000
用 float 类型在内存中的表示为:0x51BA43B7
展开为二进制形式:0 10100011 01110100100001110110111
指数部分:10100011 = 163
还原为整型数:1.01110100100001110110111 * 2^(163-127)
= 1011101001000011101101110000000000000 (二进制)
= 99999997952 (十进制)
结论:
1、 float类型能精确表达 100亿,不能精确表达 1000亿。
2、 float类型能表达的有效数字最小是 6-7位,最大未知。
3、 从 -16777216 到 16777216 之间的整数能被float类型精确表达。
相关文章推荐
- MYSQL使用float类型精确查询结果为空
- [读书笔记][Effective Java]不要在精确计算中使用float和double类型
- ios 网上找了一个float类型四舍五入精确小数点的方法
- 数据类型 - 整型(int)、字符(char)、浮点(float、double)【5】
- 精确运算不能用float/double,用什么类型?
- C#计算float类型数据求和不精确问题
- Integer 类型转换float(分转元精确转换)
- 在javaScript中使用正则表达试判断输入是否是float类型
- MYSQL使用float类型精确查询结果为空
- 不要在精确计算中使用float和double类型
- 不要在精确计算中使用float和double类型
- 学点 C 语言(12): 数据类型 - 整型(int)、字符(char)、浮点(float、double)
- iOS float类型不精确
- Double、float类型精确到小数点后几位
- 图像数据类型转化float 和 uchar 之间
- 关于SQL Server中将数值类型转换为字符串float类型超过6位会变成近似值
- Java初学习 - 枚举类型,整型,字符串之间转换
- SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]
- java中的float和double类型