许多使用IEEE 754 double的编程语言都提供了一种库函数来将这些double转换为字符串。例如,C具有sprintf,C ++具有stringstream,Java具有Double.toString等等。
sprintf
stringstream
Double.toString
在内部,这些功能如何实现?也就是说,考虑到它们经常受到程序员选择的精度限制,他们使用什么算法将双精度型转换为字符串表示形式?
谢谢!
各种软件环境用于将浮点数转换为字符串表示形式的代码通常基于以下出版物(特别经常引用Steele和White的著作):
Jerome T. Coonen:“浮点算法拟议标准的实施指南。” 计算机 卷 ,1980年1月13日,第68-79页
伙计 L. Steele Jr.和JL White:“如何准确打印浮点数”。1990年6月,纽约怀特普莱恩斯, ACM SIGPLAN ‘90编程语言设计与实现会议的论文集 ,第112-126页
David M. Gay:“正确舍入了二进制十进制和十进制二进制转换。” 技术报告90-10,AT&T贝尔实验室,1990年11月。
一些相关的后续工作:
Robert G. Burger和R. Kent Dybvig:“快速,准确地打印浮点数。” 在 1996年 5月于美国宾夕法尼亚州费城 举行 的 ACM SIGPLAN 1996编程语言设计与实现会议上 ,第108-116页
Guy L. Steele Jr.和Jon L. White:“回顾性:如何准确打印浮点数。” ACM SIGPLAN通告 ,第1卷。39,第4号,2004年4月,第372–389页
Florian Loitsch:“使用整数快速而准确地打印浮点数”。在 2010年 6月于加拿大安大略省多伦多市 举行 的 2010 ACM SIGPLAN编程语言设计与实现会议上 ,第233-243页
Marc Andrysco,Ranjit Jhala和Sorin Lerner:“打印浮点数:一种更快,始终正确的方法。” ACM SIGPLAN通告 ,第1卷。2016年1月51日,第555-567页
乌尔夫·亚当斯(Ulf Adams):“Ryū:快速的浮点到字符串转换。” ACM SIGPLAN通告 ,第1卷。53,第4号,2018年4月,第270-282页