如何在python中将数字转换为12位精度?

Sta*_*ucK 3 python floating-point precision types floating-accuracy

我需要在Python中存储一个12位精度的float变量

我知道要在float中转换变量有一个浮点函数,但是如何以位为单位指定浮点数的大小?例如(12,16,...)

Ale*_*ane 7

正如其他答案中所提到的,这在纯python数据类型中并不存在,请参阅文档

但是,您可以使用numpy指定显式数据类型,例如

  • numpy.float16
  • numpy.float32
  • numpy.float64

您还可以使用扩展精度numpy.float96,这似乎是你所追求的12个字节的96位,例如

import numpy as np
high_prec_array = np.array([1,2,3], dtype=np.float96)
Run Code Online (Sandbox Code Playgroud)

注意事项

正如评论和链接中所指出的,这不是真正的12字节精度.相反,80位(10字节)填充2个零字节.如果您只关心兼容性,这可能就足够了.

并非所有平台都提供此精度

在下表中,平台?表示该类型可能并非在所有平台上都可用.指出了与不同C或Python类型的兼容性:如果两种类型的数据具有相同的大小并以相同的方式解释,则它们是兼容的.

另请阅读有关使用此类异域类型的警告

我觉得这很有启发性.我得出结论,如果你想绝对保证96bit精度,那么python这不是正确的选择,因为可用扩展精度的固有歧义来自你的C分布的模糊性.鉴于你的物理背景我建议Fortran你使用,如果你想保证稳定性.

用C++定义自己的类型

对于感兴趣的高级用户,可以定义自己的数据类型.所述numpy上引导用户定义的类型的状态

作为我认为添加数据类型能力的有用应用的一个例子是向NumPy添加任意精度浮点数据类型的可能性.

因此,boost/multiprecision/cpp_bin_float.hpp如果您热切希望保留代码,可以尝试使用python.