如何从 [0., 1e-8] 的 argmax 中获取结果?

How do I get the results from argmax of [0., 1e-8]?

当我 运行 下面的代码时,我得到 x=1,y=0

a = np.array([0., 1e-8]).astype('float32') 
x = a.argmax()
y = (a+1).argmax()

我已经知道浮点表达式了。但是,我不知道为什么我可以得到 x=1, y=0.
我认为溢出或下溢可能与结果有关。 请帮忙解释一下!

1e-8转换为float32时,结果为float32中最接近的可表示数,即9.99999993922529029077850282192230224609375e-09,约等于1.34•2−27.

所以,在real-number算术中,1和9.99999993922529029077850282192230224609375e-09之和约为1 + 1.34•2−27float32 中最接近的两个可表示数是 1 和 1+2−23。在这两者中,1 更接近 1 + 1.34•2−27,因此 float32 加法结果为 1。因此,a+1 的元素是 1 和 1。两者都是最大值的并列候选,argmax returns 第一个的索引。