pytorch中的.float()改变了一个int的值

.float() in pytorch changes the value of an int

import torch
torch.set_printoptions(precision=1, sci_mode=False)

numeric_seq_id = 2021080918959999952

t = torch.tensor(numeric_seq_id)
tt = torch.tensor(numeric_seq_id).float() # !!!

print(t, tt)

输出是

tensor(2021080918959999952) tensor(2021080905052848128.)

我们可以看到 tt 的值在 .float() 转换后发生了变化。

为什么这里的价值差异如此之大?


ps。 pytorch 的版本 = 1.10.1

python的版本=3.8

这不是 pytorch 具体的,而是浮点数(或双精度数)在内存中的表示方式(有关详细信息,请参阅 this question),我们也可以在 [=13] 中看到=]:

import numpy as np

np_int = np.int64(2021080918959999952)
np_float = np.float32(2021080918959999952)
np_double = np.float64(2021080918959999952)

print(np_int, int(np_float), int(np_double))

输出:

2021080918959999952 2021080905052848128 2021080918960000000