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


Download files

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

Source Distribution

frepr-0.1.1.tar.gz (58.2 kB view hashes)

Uploaded Source

Built Distributions

frepr-0.1.1-cp36-cp36m-win_amd64.whl (25.1 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

frepr-0.1.1-cp36-cp36m-win32.whl (20.8 kB view hashes)

Uploaded CPython 3.6m Windows x86

frepr-0.1.1-cp35-cp35m-win_amd64.whl (25.1 kB view hashes)

Uploaded CPython 3.5m Windows x86-64

frepr-0.1.1-cp35-cp35m-win32.whl (20.8 kB view hashes)

Uploaded CPython 3.5m Windows x86

frepr-0.1.1-cp34-cp34m-win_amd64.whl (31.5 kB view hashes)

Uploaded CPython 3.4m Windows x86-64

frepr-0.1.1-cp34-cp34m-win32.whl (26.7 kB view hashes)

Uploaded CPython 3.4m Windows x86

frepr-0.1.1-cp27-cp27m-win_amd64.whl (31.1 kB view hashes)

Uploaded CPython 2.7m Windows x86-64

frepr-0.1.1-cp27-cp27m-win32.whl (26.7 kB view hashes)

Uploaded CPython 2.7m Windows x86

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page