Я использую numpy и numpy.array2string для проверки влияния небольших изменений и численной стабильности.Я сбит с толку следующим упражнением:
<Get vector data through prior code>
print(data.shape)
print(data.dtype)
variance = np.var(data)
print(variance.dtype)
print(variance)
print(np.array2string(variance, suppress_small=True,formatter={'float': '{: 8.55f}'.format}))
, которое дает в качестве выходных данных:
torch.Size([1, 64]) # shape of the data
torch.float32 # dtype of the data
float32 # dtype of the variance result
37166410.0
37166408.0000000000000000000000000000000000000000000000000000000
Это приводит меня в замешательство: array2string не просто переформатирует значение с помощью (явно абсурдно)) число цифр, похоже, само значение изменяется намного выше точки, где ошибки округления должны иметь значение.(Кажется, не выглядит как средство форматирования, так как я могу удалить это и все еще видеть измененные значения.)
float32 может легко представлять любое из этих целочисленных значений напрямую.
Что я здесь не понимаю?Пожалуйста, подтвердите мою веру в объективную реальность.
ОБНОВЛЕНИЕ: Никакой float32 не может точно представлять 37166410.0, и мне нужны очки для чтения.