如何从 [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−27。 float32
中最接近的两个可表示数是 1 和 1+2−23。在这两者中,1 更接近 1 + 1.34•2−27,因此 float32
加法结果为 1。因此,a+1
的元素是 1 和 1。两者都是最大值的并列候选,argmax
returns 第一个的索引。
当我 运行 下面的代码时,我得到 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−27。 float32
中最接近的两个可表示数是 1 和 1+2−23。在这两者中,1 更接近 1 + 1.34•2−27,因此 float32
加法结果为 1。因此,a+1
的元素是 1 和 1。两者都是最大值的并列候选,argmax
returns 第一个的索引。