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
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