homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Use the Grisu algorithms to convert floats to strings
Type: performance Stage:
Components: Interpreter Core Versions: Python 3.3
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: rhettinger Nosy List: Bart Robinson, Florian.Loitsch, amaury.forgeotdarc, djc, eric.smith, mark.dickinson, michael.foord, rhettinger, vstinner
Priority: low Keywords:

Created on 2011年06月30日 08:19 by amaury.forgeotdarc, last changed 2022年04月11日 14:57 by admin. This issue is now closed.

Messages (9)
msg139466 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2011年06月30日 08:19
Reported by Michael Ford in msg139402:
http://www.serpentine.com/blog/2011/06/29/here-be-dragons-advances-in-problems-you-didnt-even-know-you-had/
describes a new algorithm for float<->str conversions.
It would be interesting to see if it is better/faster than the current dtoa.
msg139469 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2011年06月30日 10:01
I see the problems as:
1. Given Python's other overhead, we'd need to profile to show an improvement in the speed of this conversion would make a noticeable impact on any import workload.
2. If we want to keep the shortest-float-repr property for all possible doubles, we'd need to use Grisu3 but still keep our existing code for the fallback cases. This is a big increase in the complexity of an already complex piece of code.
I'm not saying don't switch to Grisu2 or use Grisu3 with the fallback to existing code: maybe the speed improvements are worth it, maybe we can say we we can live with 99.5% shortest repr coverage, or maybe the complexity is worth it. I just want to record the issues here.
msg139472 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2011年06月30日 12:10
FWIW, I don't think this is worth further disruption. We already have an excellent set of float repr routines. There is no problem to be solved here.
msg139549 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2011年07月01日 07:13
[Amaury]
"It would be interesting to see if it is better/faster than the current dtoa."
I agree that it would be interesting to compare.
[Eric]
"maybe we can say we we can live with 99.5% shortest repr coverage"
Please no! As you say, we'd still need the fallback code.
For me, a precondition for actually switching (rather than just investigating speed differences) would be that the Grisu3 code has excellent tests. The dtoa.c code is still pretty hairy in places but is now fairly well tested and inspected; I'd hesitate to replace that with something less well exercised.
msg139552 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2011年07月01日 07:55
I concur with Mark. This is a very challenging area and no change would be warranted without keeping the current accuracy guarantees, definitive speed improvement, extensive tests, and consideration of the impact on users of having float reprs change yet again.
This was a nice tracker item for improving our awareness of alternate algorithms, but it isn't a credible feature request without the qualities listed above. 
I'll mark this as closed/rejected. Feel free to reopen if we get some solid evidence that python would be significantly improved enough to warrant the disruption for users and the investment of developer time.
msg139555 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2011年07月01日 08:30
Agreed. If some volunteer wants to work on it, I suggest to make an extension module first, so that everybody can try and compare with the current routines.
msg144217 - (view) Author: Florian Loitsch (Florian.Loitsch) Date: 2011年09月17日 19:28
FYI: the double-conversion library at http://code.google.com/p/double-conversion already contains code for the fallback case. It would not be necessary to keep Python's existing code just for the 0.5%.
The library is now used by Firefox, Chrome, and Webkit, and should be well tested.
It's biggest deficiency (compared to Gay's dtoa.c) is its specialization to IEEE doubles. Floats or long doubles are not supported. If Python needs to support these types I recommend not to switch.
msg144246 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2011年09月18日 17:16
> It's biggest deficiency (compared to Gay's dtoa.c) is its specialization > to IEEE doubles.
We're only using the portion of Gay's code (with some significant modifications at this point) that applies to the IEEE 754 binary64 format, so I don't think this is a concern.
msg288171 - (view) Author: Bart Robinson (Bart Robinson) Date: 2017年02月20日 00:25
Six years later, I have accepted Amaury's challenge and created an extension module that uses the double-conversion library to generate repr's for floats: https://pypi.python.org/pypi/frepr
My rudimentary performance testing gives something like 8X speedup compared to the standard float_repr().
Scrutiny and suggestions welcome...
History
Date User Action Args
2022年04月11日 14:57:19adminsetgithub: 56659
2017年02月20日 14:00:07vstinnersettype: enhancement -> performance
2017年02月20日 00:25:29Bart Robinsonsetnosy: + Bart Robinson
messages: + msg288171
2011年09月18日 17:16:03mark.dickinsonsetmessages: + msg144246
2011年09月17日 19:28:25Florian.Loitschsetnosy: + Florian.Loitsch
messages: + msg144217
2011年07月01日 08:30:58amaury.forgeotdarcsetmessages: + msg139555
2011年07月01日 07:55:39rhettingersetstatus: open -> closed
resolution: rejected
messages: + msg139552
2011年07月01日 07:13:20mark.dickinsonsetmessages: + msg139549
2011年06月30日 13:56:28vstinnersetnosy: + vstinner
2011年06月30日 12:10:01rhettingersetpriority: normal -> low
assignee: rhettinger
messages: + msg139472

versions: + Python 3.3
2011年06月30日 10:01:17eric.smithsetmessages: + msg139469
2011年06月30日 09:50:52eric.smithsetnosy: + eric.smith
2011年06月30日 08:34:30djcsetnosy: + djc
2011年06月30日 08:19:16amaury.forgeotdarccreate

AltStyle によって変換されたページ (->オリジナル) /