Skip to main content

Fast float repr

Project description

frepr

https://travis-ci.org/wemoloh/frepr.svg?branch=master

Fast float repr() for CPython using https://github.com/google/double-conversion. Approximately 8X faster than the built-in function.

Quick Start

>>> import frepr
>>> frepr.frepr(-1.8397892359791307e+134)
'-1.8397892359791307e+134'
>>> from timeit import timeit
>>> timeit('repr(-1.8397892359791307e+134)')
2.7296602272476758
>>> frepr.install()
>>> timeit('repr(-1.8397892359791307e+134)')
0.35723431229251545
>>> frepr.uninstall()

API

frepr.frepr(value)

Returns shortest string representation of a floating point value. The argument doesn’t have to be a float, as long as it is coercible to one (i.e. it has a __float__() method).

frepr.install()

Monkey-patches the Python runtime. Subsequent calls to repr() on floats will use the faster algorithm. This is safe to call multiple times.

frepr.uninstall()

Reverses the monkey-patching done by install(). Subsequent calls to repr() will use the original built-in algorithm. This is safe to call multiple times, even if install() was not called first.

Features

  • On average, approximately 8X faster than the standard function. (This result obtained on Python 3.6.0 64-bit/Windows 7/Intel Core i3 @ 2.93GHz. Test your own system with tests/perf.py).
  • Speeds up the standard json package (and any other library that relies on repr()).
  • Output is guaranteed to contain the shortest string of decimal digits necessary to uniquely identify the original IEEE 754 floating-point value.
  • Guaranteed to satisfy value == ast.literal_eval(frepr(value)).
  • Tested on CPython 2.6 through 3.6; probably works on other versions too.

Limitations

  • Currently, there is no support for alternative Python implementations (e.g. PyPy).
  • Output can be slightly different from the native function, due to floating-point rounding (but see accuracy guarantees above).
  • Has no effect on other built-in methods of converting floats to strings (e.g. str(), str.format(), "%f", "%g").

See Also

Project details


Release history Release notifications

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for frepr, version 0.1.1
Filename, size & hash File type Python version Upload date
frepr-0.1.1-cp27-cp27m-win32.whl (26.7 kB) View hashes Wheel cp27
frepr-0.1.1-cp27-cp27m-win_amd64.whl (31.1 kB) View hashes Wheel cp27
frepr-0.1.1-cp34-cp34m-win32.whl (26.7 kB) View hashes Wheel cp34
frepr-0.1.1-cp34-cp34m-win_amd64.whl (31.5 kB) View hashes Wheel cp34
frepr-0.1.1-cp35-cp35m-win32.whl (20.8 kB) View hashes Wheel cp35
frepr-0.1.1-cp35-cp35m-win_amd64.whl (25.1 kB) View hashes Wheel cp35
frepr-0.1.1-cp36-cp36m-win32.whl (20.8 kB) View hashes Wheel cp36
frepr-0.1.1-cp36-cp36m-win_amd64.whl (25.1 kB) View hashes Wheel cp36
frepr-0.1.1.tar.gz (58.2 kB) View hashes Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page