Why is pytorch tensor addition giving wrong value in the following situation?

In a small code snippet in a project…I have a for loop which iterates through 3 tensor values , A = torch.tensor([-3. , 6. , -3]).

det =  torch.tensor(0)
for i in range(3):
    det += A[i]
return det

Im getting the answer as, det = 2.3842e-07, all the values in A and det are of type ‘torch.float64’

On which platform are you testing? I cannot reproduce with:

import torch

def foo(A, acc_dtype):
    det =  torch.tensor(0, dtype=acc_dtype)
    for i in range(3):
        det += A[i]
    print(det)

A = torch.tensor([-3. , 6. , -3])
foo(A, acc_dtype=torch.float)
foo(A, acc_dtype=torch.double)
A = torch.tensor([-3. , 6. , -3], dtype=torch.double)
foo(A, acc_dtype=torch.float)
foo(A, acc_dtype=torch.double)

Same here. I get a 0 error in 1.11.0.dev20211101+cu113.

I tried the following snippet in google colab
Code:

a = torch.tensor([2.0, 3.0])
b = torch.tensor([5.0, 6.0])

c = torch.stack([a,b], dim = 1)
print(c)
torch.det(c)

Output:

tensor([[2., 5.],
        [3., 6.]])
tensor(-2.9999995232)

The answer should be -3. For my problem statement the outputted answer won’t help, I need it to generate -3. Please help.

Hi,

This is expected behavior. Floating point arithmetic is not exact unfortunately: Floating-point arithmetic - Wikipedia