主题:[讨论]对float的思考
windy0will
[专家分:2300] 发布于 2010-07-16 21:29:00
探究float类型的数在内存中的表示方法,输出结果看了半天还是没看出什么规律来!!!希望高手帮我分析下,谢谢!!!
代码如下 :
[code=c]
#include "stdio.h"
#include "stdlib.h"
#define N 4 //sizeof(float)
typedef union float_char {
float f ;
char c[ N ] ;
} float_char ;
void ( print_fc )( float_char fc )
{
char *p = fc.c+N-1 ,
*p0 = fc.c ;
unsigned char k = 0x80 ;
printf( "\n%10.6f -> ",fc.f ) ;
while ( p>=p0 )
{
printf( "%c ",k&(*p) ? '1' : '0' );
(k>>=1)<1 ? (printf( " " ),--p,k=0x80 ) : 0 ;
}
}
void ( print )( float f, float step, int n )
{
float_char fc={.f=f};
printf( "\n\n fc.f=%8.6f step= %8.6f n= %d",
fc.f,step,n );
for ( ;--n>=0;fc.f+=step )
print_fc( fc ) ;
}
int main( void )
{
print( 0.0, 1.0, 10 ) ;
print( 0.0, 0.5, 10 ) ;
print( 0.0, 2.0, 10 ) ;
print( 0.0,-0.01, 10 ) ;
printf( "\n\n" ) ;
system( "pause" ) ;
return 0 ;
}
[/code]
最后更新于:2010-08-02 14:32:00
回复列表 (共10个回复)
沙发
bruceteen [专家分:42660] 发布于 2010-07-16 22:19:00
直接在Google中搜索一下“浮点数 IEEE 754”就行了呀
符号位、带偏移的指数、可能还有隐含的1.0、尾数(有效数)
用十进制来说明一下,比如 -23.456,用科学计数法就是 -2.3456E10
需要一bit来指示正负号、需要几bits来指示指数值、剩下的用来保存2.3456
对于指数,因为可能有正有负,为了简便,用0来代表-n,用n来代表0,用2n来代表n,也就是全是正数,只要减去一个偏移值n就是实际的指数
对于尾数,因为实际用的是二进制,所以开头必定是“1.”,那么这个“1.”就是多余的,可以省略掉它而用来保存更多的尾数。当然不是所有浮点格式都会舍弃掉它,80bits临时实数就没舍弃它。
float和double的不同仅仅在于:用多少bits来存指数,用多少bits来存尾数
板凳
windy0will [专家分:2300] 发布于 2010-07-16 22:42:00
[quote]用十进制来说明一下,比如 -23.456,用科学计数法就是 -2.3456E10
需要一bit来指示正负号、需要几bits来指示指数值、剩下的用来保存2.3456[/quote]
我想知道的就是 用哪一个bit来表示正负号(我只知道我这台机子是第24bit表示符号) ,用几个并且哪几个bits来指示指数值,用几个并且哪几个bits来保存2.3456 ?
3 楼
强强 [专家分:4740] 发布于 2010-07-16 23:33:00
研究这个问题有什么意义呢?
4 楼
cgl_lgs [专家分:21040] 发布于 2010-07-17 07:11:00
您可以在本论坛搜一下Fortran区的帖子,俺以前回过:)
http://bbs.pfan.cn/post-305860.html
上面就是俺和jfnano兄回的帖子:)
5 楼
bruceteen [专家分:42660] 发布于 2010-07-17 13:15:00
我以前写的,你参考一下
http://blog.vckbase.com/bruceteen/articles/240.html
6 楼
强强 [专家分:4740] 发布于 2010-07-17 16:15:00
一个FLOAT用思考这么长时间吗?买一本《汇编语言程序设计》给你讲的明明白白的!
7 楼
windy0will [专家分:2300] 发布于 2010-07-17 18:56:00
先谢谢cgl_lgs 和bruceteen给出的参考信息,我现在对float,double的表示也基本了解。还有强强说的学汇编,我非常接受,正在学。[quote]研究这个问题有什么意义呢?[/quote]
对于这个问题,我觉得学C语言 不仅仅需要了解它的语法,更深一部分的知识也有必要了解的。用C语言 探究C语言本身一些特性和其他的某方面,我想也是学习C语言的方法吧!
8 楼
雪光风剑 [专家分:27190] 发布于 2010-07-18 06:55:00
float的存储是按照标准来的,其实严格来说已经不属于C语言本身的特性了
9 楼
Nature007 [专家分:20] 发布于 2010-07-26 01:25:00
下次发代码的时候,能不能写一下写这程序你的思路是怎么样的?要实现什么的要求?输入什么要期望得到什么结果?
10 楼
xingxing01 [专家分:0] 发布于 2010-07-27 15:56:00
Good news [url=http://www.toppowerlevel.net]wow power leveling[/url] everyone! In light of the 5-year anniversary of World of Warcraft's release in Europe, which our American friends [url=http://www.mogxe.com/PowerLevel.php?gid=1]wow power leveling[/url] happened to celebrate last year, the European Blizzard team has reduced the prices [url=http://www.toppowerlevel.net/powerlist.php?fid=688]wow power leveling[/url] on both the World of Warcraft Classic product and the Battle Chest bundle [url=http://www.toppowerlevel.net/buy.php]world of warcraft gold[/url] which also includes the first World of Warcraft expansion, the Burning Crusade. [url=http://www.itao123.net]淘宝网[/url]The Warcraft Battlecry Mosaic has unveiled not one but two tiles today! [url=http://www.57tao.net]淘宝网女装[/url]
The picture count has reached 15,222 and with it unlocked the [url=http://www.ccqdiy.com]重庆团购[/url] two tiles and also unlocked two pieces of art to go with it:[url=http://www.toppowerlevel.net/buy.php]best wow gold[/url]
Black and white rendering of a crazed goblin [url=http://www.toppowerlevel.net/buy.php]cheapest wow gold[/url] poised to capture his adversaries in the Gnomish Net Gun.
Early sketch of Jaina's port town of Theramore, a place still haunted by the fallen king's name.
我来回复