From 65b77ee94131bf8365d8a6dba6fa19da1269339c Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sat, 2 Apr 2011 19:54:04 +0200 Subject: BUG: core: make complex division by zero to yield inf properly (#1776) --- numpy/core/src/scalarmathmodule.c.src | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'numpy/core/src/scalarmathmodule.c.src') diff --git a/numpy/core/src/scalarmathmodule.c.src b/numpy/core/src/scalarmathmodule.c.src index 2bcc516b1..56f1bc238 100644 --- a/numpy/core/src/scalarmathmodule.c.src +++ b/numpy/core/src/scalarmathmodule.c.src @@ -382,10 +382,17 @@ static npy_half (*_basic_half_fmod)(npy_half, npy_half); (outp)->real = (a).real * (b).real - (a).imag * (b).imag; \ (outp)->imag = (a).real * (b).imag + (a).imag * (b).real; \ } while(0) -#define @name@_ctype_divide(a, b, outp) do{ \ - @rtype@ d = (b).real*(b).real + (b).imag*(b).imag; \ - (outp)->real = ((a).real*(b).real + (a).imag*(b).imag)/d; \ - (outp)->imag = ((a).imag*(b).real - (a).real*(b).imag)/d; \ +/* Note: complex division by zero must yield some complex inf */ +#define @name@_ctype_divide(a, b, outp) do{ \ + @rtype@ d = (b).real*(b).real + (b).imag*(b).imag; \ + if (d != 0) { \ + (outp)->real = ((a).real*(b).real + (a).imag*(b).imag)/d; \ + (outp)->imag = ((a).imag*(b).real - (a).real*(b).imag)/d; \ + } \ + else { \ + (outp)->real = (a).real/d; \ + (outp)->imag = (a).imag/d; \ + } \ } while(0) #define @name@_ctype_true_divide @name@_ctype_divide #define @name@_ctype_floor_divide(a, b, outp) do { \ -- cgit v1.2.1