{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,14]],"date-time":"2026-05-14T14:50:41Z","timestamp":1778770241022,"version":"3.51.4"},"reference-count":17,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2019,10,10]],"date-time":"2019-10-10T00:00:00Z","timestamp":1570665600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2019,10,10]]},"abstract":"<jats:p>Ry\u016b Printf is a new algorithm to convert floating-point numbers to decimal strings according to the printf %f, %e, and %g formats: %f generates \u2018full\u2019 output (integer part of the input, dot, configurable number of digits), %e generates scientific output (one leading digit, dot, configurable number of digits, exponent), and %g generates the shorter of the two. Ry\u016b Printf is based on the Ry\u016b algorithm, which converts binary floating-point numbers to the shortest equivalent decimal floating-point representation. We provide quantitative evidence that Ry\u016b Printf is between 3.8 and 55 times faster than existing printf implementations.<\/jats:p>\n          <jats:p>Furthermore, we show that both Ry\u016b and Ry\u016b Printf generalize to arbitrary number bases. This finding implies the existence of a fast algorithm to convert from base-10 to base-2, as long as the maximum precision of the input is known a priori.<\/jats:p>","DOI":"10.1145\/3360595","type":"journal-article","created":{"date-parts":[[2019,10,11]],"date-time":"2019-10-11T14:53:33Z","timestamp":1570805613000},"page":"1-23","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":5,"title":["Ry\u016b revisited: printf floating point conversion"],"prefix":"10.1145","volume":"3","author":[{"given":"Ulf","family":"Adams","sequence":"first","affiliation":[{"name":"Google, Germany"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2019,10,10]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/3192366.3192369"},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.3366212"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2837614.2837654"},{"key":"e_1_2_2_4_1","unstructured":"Anonymous. 2018. printf format string. https:\/\/en.wikipedia.org\/wiki\/Printf_format_string  Anonymous. 2018. printf format string. https:\/\/en.wikipedia.org\/wiki\/Printf_format_string"},{"key":"e_1_2_2_5_1","volume-title":"Ternary Computers: The Setun and the Setun 70. In Perspectives on Soviet and Russian Computing","author":"Brusentsov Nikolay Petrovich","year":"2011"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/231379.231397"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1109\/MC.1980.1653344"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1109\/C-M.1981.220378"},{"key":"e_1_2_2_9_1","unstructured":"Free Software Foundation Inc. 2018. GNU libc Printf Documentation. https:\/\/www.gnu.org\/software\/libc\/manual\/html_ node\/Floating_002dPoint- Conversions.html  Free Software Foundation Inc. 2018. GNU libc Printf Documentation. https:\/\/www.gnu.org\/software\/libc\/manual\/html_ node\/Floating_002dPoint- Conversions.html"},{"key":"e_1_2_2_11_1","unstructured":"IBM. 2018. IBM Printf Documentation. https:\/\/www.ibm.com\/support\/knowledgecenter\/en\/ssw_ibm_i_72\/rtref\/printf.htm  IBM. 2018. IBM Printf Documentation. https:\/\/www.ibm.com\/support\/knowledgecenter\/en\/ssw_ibm_i_72\/rtref\/printf.htm"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1109\/IEEESTD.2008.4610935"},{"key":"e_1_2_2_13_1","volume-title":"Easy Accurate Reading and Writing of Floating-Point Numbers. (October","author":"Jaffer Aubrey","year":"2013"},{"key":"e_1_2_2_14_1","volume-title":"Seminumerical Algorithms","author":"Knuth Donald Ervin","edition":"3"},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/1806596.1806623"},{"key":"e_1_2_2_16_1","unstructured":"Microsoft. 2016. Microsoft Visual Studio 2017: Format specification syntax: printf and wprintf functions. https:\/\/docs.microsoft. com\/en- us\/cpp\/c- runtime- library\/format- specification- syntax- printf- and- wprintf- functions?view=vs- 2017  Microsoft. 2016. Microsoft Visual Studio 2017: Format specification syntax: printf and wprintf functions. https:\/\/docs.microsoft. com\/en- us\/cpp\/c- runtime- library\/format- specification- syntax- printf- and- wprintf- functions?view=vs- 2017"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1007\/BF02074638"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/93542.93559"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3360595","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3360595","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T23:22:59Z","timestamp":1750202579000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3360595"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,10,10]]},"references-count":17,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2019,10,10]]}},"alternative-id":["10.1145\/3360595"],"URL":"https:\/\/doi.org\/10.1145\/3360595","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2019,10,10]]},"assertion":[{"value":"2019-10-10","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}