nne*_*neo 10
NumPy不对内部舍入模式进行任何控制.这有两种选择:
gmpy2
,如本答案中所述.这使您可以完全控制舍入模式,但使用gmpy2
简单的float数学可能比NumPy慢.使用fesetround
via ctypes
手动设置舍入模式.这是系统特定的,因为常量可能因平台而异; 检查fenv.h
平台上的常量值.在我的机器上(Mac OS X):
import numpy as np
import ctypes
FE_TONEAREST = 0x0000
FE_DOWNWARD = 0x0400
FE_UPWARD = 0x0800
FE_TOWARDZERO = 0x0c00
libc = ctypes.CDLL('libc.dylib')
v = 1. / (1<<23)
print repr(np.float32(1+v) - np.float32(v/2)) # prints 1.0
libc.fesetround(FE_UPWARD)
print repr(np.float32(1+v) - np.float32(v/2)) # prints 1.0000002
Run Code Online (Sandbox Code Playgroud)