请高手指教!一个简单且迷惑的问题

ANSICJAVA 2003-08-23 12:41:57
各位高手,小弟在设计类库时需要用到浮点值转换成字符串。我想清楚的知道整体数值的位数与小数点的位置,谁然数值太大会造成一定的误差,但还是希望这么做
。就想到了获取浮点值在字节里的表示,想知道每一个位的意义,不知道哪位高手可以给点提示?在这多谢了!
...全文
18 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf0403 2003-08-24
  • 打赏
  • 举报
回复
char *pStrFloat = (char*)malloc(1024);
float f = 1.0f;
sprintf(pStrFloat, "%f", f);
如果没记错,就是这个
hfhappyfish 2003-08-24
  • 打赏
  • 举报
回复
单精度:_31_30________23_22___________0
符号 指数 有效数

双精度:_63_62__________52_51__________________0
符号 指数 有效数

扩展精度数:
_79_78____________64_63___________________0
符号 指数 有效数
例子:
C377999A var1 dd -247.6
40000000 var2 dd 2.0
486F4200 var3 real4 2.45e+5
4059100000000000 var4 dq 100.25
3F543BF727136A40 var5 real8 0.00123

C377999A var1 dd -247.6
40000000 var2 dd 2.0
486F4200 var3 real4 2.45e+5
4059100000000000 var4 dq 100.25
3F543BF727136A40 var5 real8 0.001235
400487F34D6A161E4F76 var6 real10 33.9876
32位为例:
符号位:即最高位,0代表正,1代表负
偏差指数:
由 b30 到 b23 共 8 bits 組成。8 bits 可以表示的非負整数值為 0 到 255。 但指数可正可負。因此以 127 為指数偏差值 (Exponent Bias)。及实际指数 = 偏差指数 - 127。得出实际指数。
小数部分:
由 b22 到 b0 共 23 bits 所組成, 小数是是经过正规化(normalization) 后的結果, 因此可以准确到小数点后23 位 。正规化是将实数转换成二进位1.xxx * 2yyy 的形式。正规化后小数部分存入这23bits中,整数部分恒为一,省去,cpu运算时会自动补上。
把17。75转换成32为浮点数:
1:(17.75)转换成2进制(10001.11)
2:正规化,1.000111 * 2~4
3: 正数所以 b31 = 0
4:偏差指数 = 真正指数+ 127 = 4 + 127 = 131,转换成二进位等于 10000011 。(也可以二进制10000000+100-1=10000011)
符号0,偏差指数10000011,正规化后小数部分,00011100000000……。

ANSICJAVA 2003-08-24
  • 打赏
  • 举报
回复
多谢各位大侠的帮助,万分感谢hfhappyfish(孤城夜),这份资料实在太好了!谢谢!
晨星 2003-08-23
  • 打赏
  • 举报
回复
哦,不过不管你需要什么格式,好像使用sprintf都能满足要求吧。
sprintf的各类控制符可是既强大又齐全的哦。(:
ANSICJAVA 2003-08-23
  • 打赏
  • 举报
回复
多谢各位的建议!我只是觉得浮点值的"1.234e10"形式不好处理,所以想到了直接处理二进制!
bm1408 2003-08-23
  • 打赏
  • 举报
回复
前来学习!
晨星 2003-08-23
  • 打赏
  • 举报
回复
浮点数的格式是一个非常底层的东西,主要是给CPU的设计者制定的。我的建议高级语言编程中还是尽量避免直接操纵它为好。比如说,楼主确定当前的各款CPU(通用的、嵌入式的)在浮点数格式上都遵循IEEE标准吗?
短歌如风 2003-08-23
  • 打赏
  • 举报
回复

浮点值转换为字符串应该用浮点运算(除法、减法、对数等),不要直接处理其二进制表示。虽然目前编译器基本都使用IEEE标准,但标准并不保证这一点。

并且直接处理其二进制格式并不一定方便,事实上IEEE标准格式的浮点数的尾数都是[1,2)之间的二进制小数(只存储小数部分,有一个隐含的1),而阶码的底数是2而不是10,处理起来并不容易。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧