I do a matrix multiplication of  r1 = x*w1  when w1 is a dense tensor.
Then i create an sparse copy of  w1   : w2 = w1.to_sparse() and calculate : r2=x*w2
now r1 and r2 slightly differ

x = torch.randn(700,500, dtype = torch.float32)


w2 = torch.rand(500,600 , dtype = torch.float32 )
w1 = w2.to_sparse()


print( torch.abs( w2 - w1).sum()   )
>>>tensor(0.)
r1 = torch.sparse.mm( w1.t()  , x.t()  ).t()

r2= torch.mm(x , w2)


print( torch.abs(  (r2 - r1)  ).sum()   )
>>>tensor(1.4281)

when i changed dtype to float64 this difference became low
x = torch.randn(700,500, dtype = torch.float64)


w2 = torch.rand(500,600 , dtype = torch.float64 )
w1 = w2.to_sparse()


print( torch.abs( w2 - w1).sum()   )
>>>tensor(0., dtype=torch.float64)

r1 = torch.sparse.mm( w1.t()  , x.t()  ).t()

r2= torch.mm(x , w2)


print( torch.abs(  (r2 - r1)  ).sum()   )
>>>tensor(2.6097e-09, dtype=torch.float64)

Why there is such a difference?
Is there any considerable problem?
How does it effect learning a network with sparse tensors?