Creamdog 星火燎原 1 / 7
C++实现定点算法将浮点数转为字符串
作者:Creamdog
注意:此论文非正式发表,本人不对因文章内容带来的任何后果负责。因时间问题,还有很
多后续修改工作暂未完成,请见谅!
摘要:将浮点数转为字符串的具体算法在网上少有涉及,一般都采用浮点法,即通过浮点运
算确定需要的每一位上的数字。本文介绍的方法是定点法,即对 IEEE 745
[1]
的浮点数编码规
范进行硬解码。这种方法效率不高,但是精度确很好,而且思路明晰,可为浮点数计算原理
的研究工作提供参考。本文仅用 C++语言针对 float 类型的变量做了阐释,其它类型的浮点
数如 double,只是在各部分存储的长度上有差异,因此不做额外讨论。
关键词:浮点数; C++; IEEE745; 转换; 算法
1. 问题重述
1.1 目标
写一个函数,实现将 float 型变量转换为字符串的功能。
1.2 格式
函数头定义如下。
int ftostr( char *pBuf, int nSize, float fNum )
参数表:pBuf 用来存放转换后的字符串;nSize 为用户指定的 pBuf 的大小(以字节为单
位);fNum 是待转换的浮点数。
返回值:为转换后的字符串长度。空间不足或出错时返回 0。
1.3 要求
用 C 或 C++语言实现,可以使用系统库,但不得使用任何其它辅助函数或类;
不得使用系统库中已提供的相关转换函数或类;
以十进制的科学计数法表示,形式为:-3.354e-44,表示-3.354*(10^-44)。尾数的区间为
(10,-10);
当 pBuf 的空间不足时,可适当截短尾数的精度。当 pBuf 的空间不够存放符号或阶数时,
返回 0;
2. 基本理论
目前大多数编程环境中,float 类型浮点数采用科学计数法表达。但它又不同于平时常
用的以 10 为底数的科学计数法,它是以 2 为底数,表示方式为:
1
× × 2
其中
S
为符号,正为 0,负为 1;
T
为尾数,以二进制的纯小数方式表达;
E
为指数。
在 float 中符号,指数和尾数分开存储,字长为 32 位,占用连续的四个字节,存储结构如图
1 所示。
- 1
- 2
- 3
前往页