float型数 的问题。不止R有这个问题,大部分计算机语言里直接比较非整型数字都需要小心, 参考 http://www.cookbook-r.com/Numbers/Comparing_floating_point_numbers/
最简单的例子是
0.3 == 3*.1
[1] FALSE
你的例子里z-x-h产生了极小的数字
set.seed(42)
x=matrix(data=rnorm(4),nrow = 2,ncol = 2)
h=matrix(data=rnorm(4),nrow = 2,ncol = 2)
z=x+h
z-x-h
#> [,1] [,2]
#> [1,] -1.110223e-16 0.000000e+00
#> [2,] 4.163336e-17 2.775558e-17
z-(x+h)
#> [,1] [,2]
#> [1,] 0 0
#> [2,] 0 0
-x-h+z
#> [,1] [,2]
#> [1,] 0 0
#> [2,] 0 0
<sup>Created on 2023-09-20 with reprex v2.0.2</sup>