diff options
Diffstat (limited to 'sys/vops/ak/advzi.x')
-rw-r--r-- | sys/vops/ak/advzi.x | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/sys/vops/ak/advzi.x b/sys/vops/ak/advzi.x new file mode 100644 index 00000000..5aa0810e --- /dev/null +++ b/sys/vops/ak/advzi.x @@ -0,0 +1,33 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +# ADVZ -- Vector divide with checking for zero divisors. If the result of a +# divide would be undefined a user supplied function is called to get the +# output pixel value. +# +# NOTE: in the interests of simplicity a somewhat arbitrary tolerance is used +# to check for an undefined divide, i.e., a divide by zero or a divide by a +# number small enough to cause floating point overflow. A better way to do +# this would be to provide a machine dependent version of this operator in +# host$as which catches the hardware exception rather than using a comparison. + +procedure advzi (a, b, c, npix, errfcn) + +int a[ARB], b[ARB], c[ARB] # numerator, divisor, and output arrays +int npix # number of pixels +int errfcn() # user function, called on divide by zero + +int i +int divisor +extern errfcn() +errchk errfcn + +begin + + do i = 1, npix { + divisor = b[i] + if (divisor == 0) + c[i] = errfcn (a[i]) + else + c[i] = a[i] / divisor + } +end |