将IEEE 754 double转换为string的algorithm?
许多使用IEEE 754双打的编程语言提供了一个库函数来将这些双精度转换为string。 例如,C有sprintf
,C ++有stringstream
,Java有Double.toString
等
在内部,这些function是如何实现的? 也就是说,他们使用什么algorithm将double转换成string表示,因为它们通常受到程序员select的精度限制?
谢谢!
各种软件环境用于将浮点数转换为string表示的代码通常基于以下出版物(Steele和White的着作特别经常被引用):
Jerome T. Coonen。 拟议的浮点运算标准实施指南。 计算机,卷。 1,1980年1月,第68-79页
盖伊。 L. Steele Jr.和JL White。 如何准确打印浮点数 在1990年6月于纽约White Plains的ACM SIGPLAN'90关于编程语言devise和实现会议的会议录112-126页。
大卫·M·盖伊 正确舍入二进制十进制和十进制二进制转换。 技术报告90-10,AT&T贝尔实验室,1990年11月。
一些相关的后续工作:
Robert G. Burger和R. Kent Dybvig。 快速准确地打印浮点数。 在Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation,pages 108-116,Philadelphia,PA,USA,1996年5月
Guy L. Steele Jr.和Jon L. White。 回顾:如何准确地打印浮点数。 ACM SIGPLAN公告,第39卷,第4号,第372-389页,2004年4月
弗洛里安Loitsch。 用整数快速准确地打印浮点数。 2010年ACM SIGPLAN程序devise与实现会议论文集,第233-243页,加拿大安大略省多伦多,2010年6月
我相信你正在寻找印刷浮点数快速准确地
我发现在另一个post上的链接: 这里。
对于大多数您所引用的示例语言来说,源代码可以在线自由地进行search,因为它们都是开源的。
对于Java,类java.lang.Double将此工作委托给sun.misc.FloatingDecimal 。 查看它的构造函数和JavaFormatString()方法。
对于C来说,glibc总是一个很好的例子,我们可以看到浮点输出位于它自己的源文件中。