跳转到主要内容

有理数快速分数数据类型。'fractions.Fraction'的Cython化版本。

项目描述

Python的Fraction数据类型是一种进行无限有理数精确计算的好方法,在简单性、准确性和安全性方面在很大程度上优于Decimal。然而,考虑到Python 3.3+中的cdecimal加速器,速度方面并不明显。

quicktions是对原始fractions模块(如CPython 3.13a3中包含的)的改编,该模块使用Cython编译和优化,成为一个快速的本机扩展模块。

与CPython的标准库fractions模块相比,quicktions的计算速度大约是

  • Python 2.7和3.4快10倍

  • Python 3.5快6倍

  • Python 3.10快3-4倍

与CPython 3.10中的fractions模块相比,quicktions中从浮点字符串值(例如Fraction("123.456789"))创建一个Fraction实例也是

  • 从浮点字符串值快5-15倍

  • 从浮点值快3-5倍

  • 从整数分子-分母对快2-4倍

我们在此提供了一套微基准测试

https://github.com/scoder/quicktions/tree/master/benchmark

从 quicktions 1.12 开始,不同的数字类型和实现方式在 CPython 3.10 中的比较如下:

Average times for all 'create' benchmarks:
float               :    36.17 us (1.0x)
Decimal             :   111.71 us (3.1x)
Fraction            :   111.98 us (3.1x)
PyFraction          :   398.80 us (11.0x)

Average times for all 'compute' benchmarks:
float               :     4.53 us (1.0x)
Decimal             :    16.62 us (3.7x)
Fraction            :    72.91 us (16.1x)
PyFraction          :   251.93 us (55.6x)

虽然比 Python 3 中用 C 实现的 decimal 模块慢,但 quicktions 比 Python 2.7 中用 Python 实现的 decimal 模块快约 15 倍。

有关文档,请参阅 Python 标准库的 fractions 模块

https://docs.pythonlang.cn/3/library/fractions.html

变更日志

1.18 (2024-04-03)

  • 添加了使用 gcc 12 (manylinux_2_28) 构建的新的二进制轮子。

  • x86_64 轮子现在需要 SSE4.2。

  • 使用 Cython 3.0.10 构建。

1.17 (2024-03-24)

  • 通过内联二进制 GCD 计算加速了数学运算。

1.16 (2024-01-10)

1.15 (2023-08-27)

  • 通过使用 Cython 3.0.2 来添加对 Python 3.12 的支持。

1.14 (2023-03-19)

1.13 (2022-01-11)

  • 从分数字符串解析非常长的数字非常慢,甚至比 fractions.Fraction 还慢。现在解析器在所有情况下都更快(并且对于较短的数字仍然更快)。

  • Fraction 没有实现 __int__https://bugs.python.org/issue44547

1.12 (2022-01-07)

1.11 (2019-12-19)

  • 修复了解析具有长小数部分的字符串值时的 OverflowError

1.10 (2019-08-23)

  • hash(fraction) 在 Py3.8+ 中显著更快,这是由于 CPython 3.9 中的优化(https://bugs.python.org/issue37863)。

  • 添加了新的方法 fraction.as_integer_ratio()

1.9 (2018-12-26)

  • Py3.5+ 中规范化(因此是实例化)的速度显著提高。

  • //(地板除)现在在用于浮点数时遵循预期的舍入行为(通过先转换为浮点数),并且对于整数运算要快得多。

  • 修复了 divmod() 的返回类型,其中第一个项目应该是整数。

  • 进一步加速模和 divmod 操作。

1.8 (2018-12-26)

  • 加快模和 divmod 计算的速度。

1.7 (2018-10-16)

  • 加快规范化和小数字符串解析的速度。

  • 添加对 Python 3.7 的支持。

  • 使用 Cython 0.29 构建。

1.6 (2018-03-23)

  • 通过 3-5 倍的速度加快从字符串值创建分数的速度。

  • 使用 Cython 0.28.1 构建。

1.5 (2017-10-22)

  • 对于负值,幂运算符(**)的结果没有规范化。

  • 使用 Cython 0.27.2 构建。

1.4 (2017-09-16)

  • 重新使用 Cython 0.26.1 构建,以改善对 Python 3.7 的支持。

1.3 (2016-07-24)

  • 修复从 Python 3.6 中的 Decimal 值快速实例化的问题

  • 避免在 Python 2.x 下的规范化中某些大数字的潜在问题

1.2 (2016-04-08)

  • 将 Python 2.x 中的哈希函数改为与 fractions.Fraction 相匹配

1.1 (2016-03-29)

  • 从浮点值实例化更快

  • 在 Python 3.6 中从 Decimal 值实例化更快

1.0 (2015-09-10)

  • Fraction.imag 属性可能返回非零值

  • 解析具有长分数部分的字符串可能使用不正确的比例

0.7 (2014-10-09)

  • 从浮点值和字符串值实例化更快

  • 修复 Python 2.x 中的测试

0.6 (2014-10-09)

  • 标准化更快(因此实例化更快)

0.5 (2014-10-06)

  • 数学运算更快

0.4 (2014-10-06)

  • 在 Python 2.x 中启用旧版除法支持

0.3 (2014-10-05)

  • 在 Python 2.x 中的边缘情况中进行了少量行为修复(现在 Py2.7 也通过所有测试)

0.2 (2014-10-03)

  • 缓存分数的哈希值

0.1 (2014-09-24)

  • 首次公开发布

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解有关 安装软件包 的更多信息。

源分发

quicktions-1.18.tar.gz (371.0 kB 查看哈希值)

上传时间

构建分发

quicktions-1.18-cp312-cp312-win_amd64.whl (100.6 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

quicktions-1.18-cp312-cp312-win32.whl (91.0 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86

quicktions-1.18-cp312-cp312-musllinux_1_2_x86_64.whl (132.7 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.2+ x86-64

quicktions-1.18-cp312-cp312-musllinux_1_2_aarch64.whl (120.1 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.2+ ARM64

quicktions-1.18-cp312-cp312-musllinux_1_1_x86_64.whl (137.6 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ x86-64

quicktions-1.18-cp312-cp312-musllinux_1_1_aarch64.whl (126.3 kB 查看哈希)

上传于 CPython 3.12 musllinux: musl 1.1+ ARM64

quicktions-1.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (132.5 kB 查看哈希)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

quicktions-1.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (120.3 kB 查看哈希)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

quicktions-1.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (145.6 kB 查看哈希)

上传于 CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

quicktions-1.18-cp312-cp312-macosx_11_0_universal2.whl (232.6 kB 查看哈希)

上传于 CPython 3.12 macOS 11.0+ universal2 (ARM64, x86-64)

quicktions-1.18-cp312-cp312-macosx_11_0_arm64.whl (116.4 kB 查看哈希)

上传于 CPython 3.12 macOS 11.0+ ARM64

quicktions-1.18-cp312-cp312-macosx_10_9_x86_64.whl (124.6 kB 查看哈希)

上传于 CPython 3.12 macOS 10.9+ x86-64

quicktions-1.18-cp311-cp311-win_amd64.whl (98.1 kB 查看哈希)

上传于 CPython 3.11 Windows x86-64

quicktions-1.18-cp311-cp311-win32.whl (88.8 kB 查看哈希)

上传于 CPython 3.11 Windows x86

quicktions-1.18-cp311-cp311-musllinux_1_2_x86_64.whl (135.7 kB 查看哈希)

上传于 CPython 3.11 musllinux: musl 1.2+ x86-64

quicktions-1.18-cp311-cp311-musllinux_1_2_aarch64.whl (123.4 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.2+ ARM64

quicktions-1.18-cp311-cp311-musllinux_1_1_x86_64.whl (138.2 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ x86-64

quicktions-1.18-cp311-cp311-musllinux_1_1_aarch64.whl (129.0 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ ARM64

quicktions-1.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (135.3 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

quicktions-1.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (123.5 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

quicktions-1.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (146.3 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

quicktions-1.18-cp311-cp311-macosx_11_0_arm64.whl (114.5 kB 查看哈希值)

上传时间 CPython 3.11 macOS 11.0+ ARM64

quicktions-1.18-cp311-cp311-macosx_10_9_x86_64.whl (120.0 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ x86-64

quicktions-1.18-cp310-cp310-win_amd64.whl (98.2 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

quicktions-1.18-cp310-cp310-win32.whl (90.3 kB 查看哈希值)

上传于 CPython 3.10 Windows x86

quicktions-1.18-cp310-cp310-musllinux_1_2_x86_64.whl (135.7 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ x86-64

quicktions-1.18-cp310-cp310-musllinux_1_2_aarch64.whl (123.3 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.2+ ARM64

quicktions-1.18-cp310-cp310-musllinux_1_1_x86_64.whl (139.1 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ x86-64

quicktions-1.18-cp310-cp310-musllinux_1_1_aarch64.whl (130.0 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ ARM64

quicktions-1.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (135.3 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

quicktions-1.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (123.3 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

quicktions-1.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (154.2 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

quicktions-1.18-cp310-cp310-macosx_11_0_arm64.whl (114.8 kB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

quicktions-1.18-cp310-cp310-macosx_10_9_x86_64.whl (120.0 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

quicktions-1.18-cp39-cp39-win_amd64.whl (98.8 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

quicktions-1.18-cp39-cp39-win32.whl (90.9 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86

quicktions-1.18-cp39-cp39-musllinux_1_2_x86_64.whl (136.2 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ x86-64

quicktions-1.18-cp39-cp39-musllinux_1_2_aarch64.whl (124.3 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.2+ ARM64

quicktions-1.18-cp39-cp39-musllinux_1_1_x86_64.whl (139.7 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.1+ x86-64

quicktions-1.18-cp39-cp39-musllinux_1_1_aarch64.whl (130.6 kB 查看哈希值)

上传时间 CPython 3.9 musllinux: musl 1.1+ ARM64

quicktions-1.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (135.8 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

quicktions-1.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (124.3 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

quicktions-1.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (154.8 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

quicktions-1.18-cp39-cp39-macosx_11_0_arm64.whl (115.4 kB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

quicktions-1.18-cp39-cp39-macosx_10_9_x86_64.whl (120.8 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

quicktions-1.18-cp38-cp38-win_amd64.whl (99.0 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

quicktions-1.18-cp38-cp38-win32.whl (90.9 kB 查看哈希值)

上传于 CPython 3.8 Windows x86

quicktions-1.18-cp38-cp38-musllinux_1_2_x86_64.whl (136.7 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.2+ x86-64

quicktions-1.18-cp38-cp38-musllinux_1_2_aarch64.whl (124.9 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.2+ ARM64

quicktions-1.18-cp38-cp38-musllinux_1_1_x86_64.whl (141.2 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ x86-64

quicktions-1.18-cp38-cp38-musllinux_1_1_aarch64.whl (129.3 kB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ ARM64

quicktions-1.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (136.3 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

quicktions-1.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (124.9 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

quicktions-1.18-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (152.5 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

quicktions-1.18-cp38-cp38-macosx_11_0_arm64.whl (115.0 kB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ ARM64

quicktions-1.18-cp38-cp38-macosx_10_9_x86_64.whl (120.3 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ x86-64

quicktions-1.18-cp37-cp37m-win_amd64.whl (96.5 kB 查看哈希值)

上传于 CPython 3.7m Windows x86-64

quicktions-1.18-cp37-cp37m-win32.whl (89.2 kB 查看哈希值)

上传于 CPython 3.7m Windows x86

quicktions-1.18-cp37-cp37m-musllinux_1_2_x86_64.whl (131.3 kB 查看哈希值)

上传于 CPython 3.7m musllinux: musl 1.2+ x86-64

quicktions-1.18-cp37-cp37m-musllinux_1_2_aarch64.whl (120.9 kB 查看哈希值)

上传于 CPython 3.7m musllinux: musl 1.2+ ARM64

quicktions-1.18-cp37-cp37m-musllinux_1_1_x86_64.whl (134.8 kB 查看哈希值)

上传于 CPython 3.7m musllinux: musl 1.1+ x86-64

quicktions-1.18-cp37-cp37m-musllinux_1_1_aarch64.whl (125.0 kB 查看哈希值)

上传于 CPython 3.7m musllinux: musl 1.1+ ARM64

quicktions-1.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (130.9 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

quicktions-1.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (120.4 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

quicktions-1.18-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (147.8 kB 查看哈希值)

上传时间: CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

quicktions-1.18-cp37-cp37m-macosx_10_9_x86_64.whl (118.0 kB 查看哈希值)

上传时间: CPython 3.7m macOS 10.9+ x86-64

quicktions-1.18-cp36-cp36m-win_amd64.whl (106.1 kB 查看哈希值)

上传时间: CPython 3.6m Windows x86-64

quicktions-1.18-cp36-cp36m-win32.whl (95.4 kB 查看哈希值)

上传时间: CPython 3.6m Windows x86

quicktions-1.18-cp36-cp36m-musllinux_1_2_x86_64.whl (127.7 kB 查看哈希值)

上传时间: CPython 3.6m musllinux: musl 1.2+ x86-64

quicktions-1.18-cp36-cp36m-musllinux_1_2_aarch64.whl (116.7 kB 查看哈希值)

上传时间: CPython 3.6m musllinux: musl 1.2+ ARM64

quicktions-1.18-cp36-cp36m-musllinux_1_1_x86_64.whl (132.0 kB 查看哈希值)

上传时间: CPython 3.6m musllinux: musl 1.1+ x86-64

quicktions-1.18-cp36-cp36m-musllinux_1_1_aarch64.whl (123.0 kB 查看哈希值)

上传时间: CPython 3.6m musllinux: musl 1.1+ ARM64

quicktions-1.18-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (127.2 kB 查看哈希值)

上传时间: CPython 3.6m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.28+ x86-64

quicktions-1.18-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl (116.9 kB 查看哈希值)

上传时间: CPython 3.6m manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.28+ ARM64

quicktions-1.18-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (143.1 kB 查看哈希值)

上传时间: CPython 3.6m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

quicktions-1.18-cp36-cp36m-macosx_10_9_x86_64.whl (116.1 kB 查看哈希值)

上传时间: CPython 3.6m macOS 10.9+ x86-64

quicktions-1.18-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (137.0 kB 查看哈希值)

上传时间: CPython 3.5m manylinux: glibc 2.5+ x86-64

quicktions-1.18-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl (131.2 kB 查看哈希值)

上传时间: CPython 3.5m manylinux: glibc 2.5+ i686

quicktions-1.18-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl (133.8 kB 查看哈希值)

上传时间: CPython 2.7mu manylinux: glibc 2.5+ x86-64

quicktions-1.18-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl (131.0 kB 查看哈希值)

上传时间: CPython 2.7mu manylinux: glibc 2.5+ i686

quicktions-1.18-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (133.7 kB 查看哈希值)

上传时间: CPython 2.7m manylinux: glibc 2.5+ x86-64

quicktions-1.18-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl (129.9 kB 查看哈希值)

上传时间: CPython 2.7m manylinux: glibc 2.5+ i686

支持者