有趣的单精度浮点数(float)
2015-11-26 19:55
232 查看
缘起:一个执行不完的循环
float f; for(f=0;f<1E8;f+=1){ //printf("%f ",f); } printf("OK\n");
上面这个循环总也无法执行完毕,究竟是为什么呢?
原因:(白色文字,请选中查看)
浮点数无法精确表示所有的整数。当f达到16777216之后,f+1的16777217无法被表示出来,经过舍入之后仍为16777216。
float能够表示的连续整数范围
-16777216到+16777216(0xFF000000-0x1000000),即±2^24float能够表示的连续偶数范围
-33554432到+33554432(0xFE000000-0x2000000),即±2^25float的表示精度
正常情况下不超过2/166777216,大概是800万分之一。(注:超过表示范围的极大值或非常接近于0的极小值精度除外)
按照IEEE754标准,单精度浮点数使用32bit来存储,其中符号位1bit,底数23bit,阶码(移码)8bit
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 如何组织构建多文件 C 语言程序(二)
- 关于PHP浮点数你应该知道的(All 'bogus' about the float in PHP)
- 关于指针的一些事情
- 如何写好 C main 函数
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#浮点数的表示和基本运算
- C++联合体转换成C#结构的实现方法
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C语言中fchdir()函数和rewinddir()函数的使用详解