如何知道要使用哪种类型的浮点?

2024-04-19 02:09:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是:给定一个浮点数,numpy中的最小类型是什么?考虑下面的例子:

dt = datetime.datetime(2018, 8, 1, 17, 32, 53, 966819)
dt_unix = dt.timestamp()
print(dt_unix)
print(np.float32(dt_unix))
print(np.float64(dt_unix))
print(np.finfo(np.float32).precision)

输出为:

1533115973.966819
1533116000.0
1533115973.966819
6

很明显,np.float32似乎无法容纳它,但我怎么知道在以前的文章中?毕竟,建议的精度是6。所以一般来说,一个特定类型的范围是多少,例如np.float32,这个类型的精度是多少。你知道吗


Tags: numpy类型datetimenpdtunix精度timestamp
1条回答
网友
1楼 · 发布于 2024-04-19 02:09:14

整数

^{}提供有关数据类型的各种信息。我发现这里使用epsneg最方便:它是最小的数字x,因此1-x的表示形式不同于1。只要N和N-1是不同的,就可以精确地表示整数N。这意味着适合浮点格式的整数的上界是1/epsneg

print(1/np.finfo(np.float16).epsneg)  # 2048
print(1/np.finfo(np.float32).epsneg)  # 16777216
print(1/np.finfo(np.float64).epsneg)  # 9007199254740992
print(1/np.finfo(np.float128).epsneg) # 18446744073709551616

浮点数

这更为复杂,因为大多数实数,如0.1,并没有像NumPy那样精确地用浮点格式表示。我们可以先尝试最精确的可用格式,然后检查它是否仍然以相同的方式用较小的格式表示。你知道吗

>>> x = np.float128('0.9764404296875')
>>> np.float64(x) == x
True
>>> np.float32(x) == x
True
>>> np.float16(x) == x
False

所以,这个数字精确地用float32表示,而不是float16。你知道吗

再说一次,这主要是理论上的,因为如果这个数字不是专门为这个演示创建的,我们可能每次都会出错:所有浮点表示都可能涉及舍入错误。你知道吗

相关问题 更多 >