跳转到主要内容

将IBM十六进制浮点数转换为IEEE 754浮点数

项目描述

ibm2ieee包提供了NumPy通用函数("ufunc")将IBM单精度和双精度十六进制浮点数转换为Python和NumPy在几乎所有当前平台上使用的IEEE 754格式的浮点数。

功能

  • 快速:在典型现代机器上,假设正常输入,每秒可转换200-400百万个值。

  • 正确:转换结果按照默认的IEEE 754四舍六入五舍偶舍的舍入模式正确舍入。边界情况(溢出、下溢、亚数值结果、有符号零、非规格化输入)都得到正确处理。当舍入后的转换值超出目标类型的范围时,返回相应的有符号无穷大。

  • 处理单精度和双精度输入和输出格式。

可移植性提示:此模块提供的转换函数假定 numpy.float32numpy.float64 是基于标准的IEEE 754二进制32和二进制64浮点格式。这在当前的大多数平台上都是正确的,但并非相关语言标准所保证。

用法

此包提供了两个函数

  • ibm2float32 将IBM单精度或双精度数据转换为IEEE 754单精度值,格式为 numpy.float32

  • ibm2float64 将IBM单精度或双精度数据转换为IEEE 754双精度值,格式为 numpy.float64

对于这两个函数,IBM单精度输入数据必须使用 numpy.uint32 dtype 表示,而IBM双精度输入必须使用 numpy.uint64 表示。

这两个函数都假定IBM数据已经被转换为NumPy整数格式,使得浮点数的最显著位成为整数值的最显著位。因此,当解码表示IBM十六进制浮点数的字节数据时,考虑字节数据的字节序非常重要。下面是转换大端字节数据的示例。

示例

>>> import numpy
>>> from ibm2ieee import ibm2float32, ibm2float64
>>> ibm2float32(numpy.uint32(0xc1180000))
-1.5
>>> type(ibm2float32(numpy.uint32(0xc1180000)))
<class 'numpy.float32'>
>>> ibm2float32(numpy.uint64(0x413243f6a8885a31))
3.1415927
>>> ibm2float32(numpy.uint32(0x61100000))
inf
>>> ibm2float64(numpy.uint32(0xc1180000))
-1.5
>>> ibm2float64(numpy.uint64(0x413243f6a8885a31))
3.141592653589793
>>> ibm2float64(numpy.uint32(0x61100000))
3.402823669209385e+38
>>> input_array = numpy.arange(
        0x40fffffe, 0x41000002, dtype=numpy.uint32).reshape(2, 2)
>>> input_array
array([[1090519038, 1090519039],
       [1090519040, 1090519041]], dtype=uint32)
>>> ibm2float64(input_array)
array([[9.99999881e-01, 9.99999940e-01],
       [0.00000000e+00, 9.53674316e-07]])

当转换从文件中读取的字节数据时,了解数据的字节序(这在使用IBM十六进制浮点数的旧数据文件中通常是big-endian)非常重要。以下是将大端形式存储的IBM单精度数据转换为 numpy.float32 的示例。请注意,在将字节数组转换为NumPy uint32 数组时使用了 '>u4' dtype。对于小端输入数据,您将使用 '<u4'

>>> input_data = b'\xc12C\xf7\xc1\x19!\xfb\x00\x00\x00\x00A\x19!\xfbA2C\xf7'
>>> input_as_uint32 = numpy.frombuffer(input_data, dtype='>u4')
>>> input_as_uint32
array([3241296887, 3239649787,          0, 1092166139, 1093813239],
      dtype=uint32)
>>> ibm2float32(input_as_uint32)
array([-3.141593, -1.570796,  0.      ,  1.570796,  3.141593],
      dtype=float32)

关于格式的说明

IBM单精度格式具有6个十六进制数字的精度,实际上转换为21-24位精度,具体取决于相关值所属的binade。IEEE 754单精度具有24位精度。因此,所有不太小、不太大的IBM单精度值都可以精确转换为IEEE 754单精度值,不会丢失精度。然而,IBM单精度的范围大于相应的IEEE 754范围,因此极端的IBM单精度值在转换为IEEE 754单精度时可能会溢出到无穷大,下溢到零,或舍入到亚数值。

对于双精度转换,权衡是相反的:IBM双精度格式具有53-56位的有效精度,而IEEE 754双精度具有53位精度。因此,大多数IBM值在转换为IEEE 754时会舍入。然而,IEEE 754双精度范围大于IBM双精度范围,因此在将IBM双精度转换为IEEE 754双精度时不会出现溢出、下溢或精度降低的亚数值结果。

每个IBM单精度值都可以在IEEE 754双精度中精确表示,因此如果您想要IBM单精度数据的无损表示,请使用 ibm2float64

请注意,IBM格式不允许表示特殊值,如无穷大和NaN。然而,有符号零是可表示的,并且零的符号在所有转换中都得到保留。

安装

最新的ibm2ieee版本可在Python包索引中找到,地址为 https://pypi.ac.cn/project/ibm2ieee。可以使用 pip 以常规方式安装。

pip install ibm2ieee

轮子适用于常见的平台和Python版本。如果从源代码安装,请注意,ibm2ieee 包含一个 C 扩展,因此您需要在您的系统上安装适当的编译器才能进行安装。

ibm2ieee 需要 Python >= 3.7。

许可证

(C)版权所有 2018-2023 Enthought, Inc.,德克萨斯州奥斯汀。保留所有权利。

本软件根据 LICENSE.txt 中包含的 BSD 许可证提供,且仅可在上述许可证所述条件下重新分发。许可证还可在以下网址在线获取:http://www.enthought.com/licenses/BSD.txt

感谢您使用 Enthought 开源软件!

项目详情


下载文件

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

源分发

ibm2ieee-1.3.3.tar.gz (17.1 kB 查看哈希值)

上传时间

构建分发

ibm2ieee-1.3.3-cp312-cp312-win_amd64.whl (21.4 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

ibm2ieee-1.3.3-cp312-cp312-win32.whl (21.1 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86

ibm2ieee-1.3.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (31.3 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ ARM64

ibm2ieee-1.3.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.1 kB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

ibm2ieee-1.3.3-cp312-cp312-macosx_10_9_x86_64.whl (18.4 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp312-cp312-macosx_10_9_universal2.whl (22.2 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp311-cp311-win_amd64.whl (21.3 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

ibm2ieee-1.3.3-cp311-cp311-win32.whl (20.9 kB 查看哈希值)

上传于 CPython 3.11 Windows x86

ibm2ieee-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (30.6 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

ibm2ieee-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.5 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

ibm2ieee-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (30.6 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl (18.2 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

ibm2ieee-1.3.3-cp311-cp311-macosx_10_9_universal2.whl (21.9 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

ibm2ieee-1.3.3-cp310-cp310-win_amd64.whl (21.3 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

ibm2ieee-1.3.3-cp310-cp310-win32.whl (20.9 kB 查看哈希值)

上传于 CPython 3.10 Windows x86

ibm2ieee-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (30.5 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

ibm2ieee-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.5 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

ibm2ieee-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (30.6 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl (18.2 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp310-cp310-macosx_10_9_universal2.whl (21.9 kB 查看哈希值)

上传时间 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

ibm2ieee-1.3.3-cp39-cp39-win_amd64.whl (21.3 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

ibm2ieee-1.3.3-cp39-cp39-win32.whl (20.9 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86

ibm2ieee-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (30.4 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.3 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (30.4 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl (18.2 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

ibm2ieee-1.3.3-cp39-cp39-macosx_10_9_universal2.whl (21.9 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

ibm2ieee-1.3.3-cp38-cp38-win_amd64.whl (21.3 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

ibm2ieee-1.3.3-cp38-cp38-win32.whl (20.9 kB 查看哈希值)

上传于 CPython 3.8 Windows x86

ibm2ieee-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (31.2 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

ibm2ieee-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.1 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (31.2 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl (18.2 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ x86-64

ibm2ieee-1.3.3-cp38-cp38-macosx_10_9_universal2.whl (21.9 kB 查看哈希值)

上传于 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

ibm2ieee-1.3.3-cp37-cp37m-win_amd64.whl (21.3 kB 查看哈希值)

上传于 CPython 3.7m Windows x86-64

ibm2ieee-1.3.3-cp37-cp37m-win32.whl (20.9 kB 查看哈希值)

上传于 CPython 3.7m Windows x86

ibm2ieee-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (30.6 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.6 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (30.8 kB 查看哈希值)

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

ibm2ieee-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl (18.1 kB 查看哈希值)

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

支持者