I have got that this is due to round-off error.
but the thing is in the following code this error is 0.

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


w2 = torch.rand(500,600 , dtype = torch.float32 )
w1 = w2.to_sparse()
w1 = w1.to_dense()
w1 = w1.clone()
print( torch.abs( w2 - w1).sum()   )
>>>tensor(0.)


r1= torch.mm(x , w1)
r2= torch.mm(x , w2)


print( torch.abs( 1* (r2 - r1)  ).sum()   )
>>>tensor(0.)

The thing that I want to know is that what mechanism is underlying torch.sparse.mm() compare to torch.mm()  which cause this error?
As I know if we have a1=a2 (dtype = float32 ) and all 32 bits of a1 be identical to a2
and also have b1=b2 (dtype = float32 ) and all 32 bits of b1 be identical to b2 and we do an identical floating-point operation by an FPU and get c1=a1*b1  and c2=a2*b2 we expect that c1=c2 and all 32 bits of c1 be identical to c2.