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.

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

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