免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: raincatss
打印 上一主题 下一主题

[函数] 如何将一个浮点数转换为字符串 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-03-14 14:27 |只看该作者

回复 #9 net_robber 的帖子

其实我是想自己实现标准库的所有功能,弄清标准库的原理及实现

论坛徽章:
0
12 [报告]
发表于 2008-03-14 14:31 |只看该作者
原帖由 raincatss 于 2008-3-14 14:26 发表
double是8位的,long只有4位,强制类型转换可能会超出long的表示范围而产生错误的结果。

你确定会出问题?反正我没遇到过double到long强制转换的时候出问题的。不过如果整数部分大于了long的表示范围可能就出错了。
那用long long型的吧,或者int64_t类型也行。

论坛徽章:
0
13 [报告]
发表于 2008-03-14 14:31 |只看该作者

回复 #11 raincatss 的帖子

如果是为了学习,那就去看glibc的代码,如果是要造轮子,那还是算了吧

论坛徽章:
0
14 [报告]
发表于 2008-03-14 14:43 |只看该作者
原帖由 cugb_cat 于 2008-3-14 14:31 发表

你确定会出问题?反正我没遇到过double到long强制转换的时候出问题的。不过如果整数部分大于了long的表示范围可能就出错了。
那用long long型的吧,或者int64_t类型也行。



如果浮点数指数部分大于32,一定会出问题了,因为long才32位。如果大于64,long long或int64_t也不行吧。

论坛徽章:
0
15 [报告]
发表于 2008-03-14 14:44 |只看该作者
原帖由 cugb_cat 于 2008-3-14 14:31 发表
如果是为了学习,那就去看glibc的代码,如果是要造轮子,那还是算了吧



当然是为了学习,不过之前只听过glibc,具体是什么还不知道。今天算是长见识了,以后要学习一下glibc,现在已经下载下来了

论坛徽章:
0
16 [报告]
发表于 2008-03-14 14:54 |只看该作者
原帖由 raincatss 于 2008-3-14 14:44 发表



当然是为了学习,不过之前只听过glibc,具体是什么还不知道。今天算是长见识了,以后要学习一下glibc,现在已经下载下来了


你也可以看看 FreeBSD 里面的非线程安全的版本的libc库的实现.


链接
http://www.freebsd.org/cgi/cvswe ... vfprintf.c?rev=1.77

搜索__vfprintf这个函数的定义就行了.

论坛徽章:
0
17 [报告]
发表于 2008-03-14 14:57 |只看该作者

回复 #16 Edengundam 的帖子

谢谢!

论坛徽章:
0
18 [报告]
发表于 2008-03-14 14:58 |只看该作者

回复 #8 cugb_cat 的帖子

不是这样的
应该是先确定小数部分和指数部分,两部分确定后就知道浮点数的整数有多少位,小数有多少位...

论坛徽章:
0
19 [报告]
发表于 2008-03-14 15:28 |只看该作者
原帖由 cugb_cat 于 2008-3-14 13:48 发表

整数部分通过强制类型转换可以得到(负数另行处理)
小数部分是减去整数部分的值,然后每次乘10来得到整数部分。

ahhah

论坛徽章:
0
20 [报告]
发表于 2008-03-18 12:38 |只看该作者
标准库很多函数是用汇编写的,直接用C代码实现很难,而且标准库中很多用了系统调用,自己是写不出完全一样的来的,只能写出一些功能近似的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP