// mathslib.hoc // Collection of miscellaneous maths functions // Andrew Davison, The Babraham Institute, 2000. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // mod(x,y) // Returns a number between 0 and y- // e.g. mod(7,4) returns 3 func mod() { local x // 2 args - \$1 mod \$2 x = \$1 while (x < 0) { x = x+\$2 } while (x >= \$2) { x = x-\$2 } return x } // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // arraymax(M) and arraymin(M) // Return maximum and minimum elements of a matrix object objref mymaths_work mymaths_work = new Vector() func arraymax() { local i, max // arg - matrix object max = -1e10 for i = 0,\$o1.nrow-1 { mymaths_work = \$o1.getrow(i) if (mymaths_work.max() > max) { max = mymaths_work.max() } } return max } func arraymin() { local i, min // arg - matrix object min = 1e10 for i = 0,\$o1.nrow-1 { mymaths_work = \$o1.getrow(i) if (mymaths_work.min() < min) { min = mymaths_work.min() } } return min } // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // nint(x) // Returns nearest integer // e.g. nint(3.6) returns 4 func nint() { if ( abs(\$1 - int(\$1)) <= 0.5) { return int(\$1) } else { if (\$1 < 0) { return int(\$1)-1 } if (\$1 >= 0) { return int(\$1)+1 } } } // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // invabs(x) // Returns absolute value of the inverse of the argument // e.g. invabs(-2) returns 0.5 func invabs() { if (\$1 == 0) { print "Error in invabs(): divide by zero" return 1e3 } else { return abs(1.0/\$1) } } // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=