我试图实现通用版本的快速反平方根,我在这里找到了相关内容。目前为止,我的实现如下:
import numpy as np
def get_K(exponent, B=127, L=2**23, sigma=0.0450465, f=np.float32):
return f((1 - exponent) * L * (B - f(sigma)))
def get_result(exponent, B=127, L=2**23, sigma=0.0450465, f=np.float32):
K = f(get_K(exponent, 127, 2**23, f(0.0450465)))
return lambda num: (K + f(num*exponent))
if __name__ == '__main__':
print((get_result(0.5)(2)).astype(np.int32))
但是当我运行上面的示例时,得到的结果是532487680
,这与使用numpy.float32
表示对get_result(0.5)(2)
的结果相同。
我做错了什么?换句话说,如何像在C语言中一样使用numpy将这个数字从32位浮点数转换为32位整数?
.view(np.int32)
代替.astype(np.int32)
。 - Jaime