Standard numpy round tie breaking is following IEEE 754 convention, to round half towards the nearest even number. Is there a way to specify different rounding behavior, e.g. round towards zero or towards -inf? I'm not talking about ceil or floor, I just need different tie breaking.
NumPy doesn't give any control over the internal rounding mode. Here's two alternatives:
gmpy2
, as outlined in this answer. This gives you full control over the rounding mode, but using gmpy2
for simple float math is likely to be slower than NumPy.Use fesetround
via ctypes
to manually set the rounding mode. This is system-specific because the constants may vary by platform; check fenv.h
for the constant values on your platform. On my machine (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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With