const Polynomial<T> NewtonDividedDifference<T>::operator()(int numValues, const Array<std::pair<T, T> >& functionValues) { Array<Array<T> > divDiffTable(numValues); for (int i = 0; i < numValues; ++i){ int size = numValues + 1 - i; divDiffTable[i] = Array<T>(size); divDiffTable[i][0] = functionValues[i].first; divDiffTable[i][1] = functionValues[i].second; } for (int j = 2; j <= numValues+1; ++j){ for (int i = 0; i < numValues+1-j; ++i){ T numerator = divDiffTable[i+1][j-1] - divDiffTable[i][j-1]; T denominator = divDiffTable[j+i-1][0] - divDiffTable[i][0]; if (denominator == 0){ throw DivideByZeroException(); } divDiffTable[i][j] = numerator / denominator; } } Array<T> coefficients(numValues - 1); for (int i = 0; i < numValues - 1; ++i){ coefficients[i] = divDiffTable[0][i+1]; } return Polynomial<T>(coefficients); }
Point& Point::operator/=(const int divisor) { if (divisor == 0) throw DivideByZeroException(); rx() /= divisor; ry() /= divisor; return *this; }
Vector3& Vector3::operator/=(double value) { if(value == 0) { throw DivideByZeroException("value"); } this->X /= value; this->Y /= value; this->Z /= value; return *this; }
const DivisionResult Integer::doDivide(const Integer a, const Integer b) throw (DivideByZeroException) { if (b.compareTo(Integer::ZERO) == 0) { throw DivideByZeroException(); } if (a.compareTo(Integer::ZERO) == 0) { return DivisionResult(Integer::ZERO, Integer::ZERO); } if (b.compareTo(Integer::ONE) == 0) { return DivisionResult(a, Integer::ZERO); } DivisionResult ret(Integer::ZERO, a.abs()); int lengthDifference = ret.remainder.bytes.length() - b.abs().bytes.length(); for (int i = lengthDifference; i >= 0; --i) { std::stringstream ss; ss << i; Integer base = Integer::TEN.power(ss.str()); Integer temp = b.abs().multiply(base); while (temp.compareTo(ret.remainder) <= 0) { ret.remainder = ret.remainder.subtract(temp); ret.result = ret.result.add(base); } } if (a.isPositive() != b.isPositive()) { ret.result = ret.result.negate(); if (b.isPositive()) { ret.remainder = b.subtract(ret.remainder); } else { ret.remainder = b.add(ret.remainder); } } else { if (!b.isPositive()) { ret.remainder = ret.remainder.negate(); } } return ret; }
double MathUtil::divide(double left, double right) { if(right == 0) throw DivideByZeroException("Divide By Zero Error"); return left / right; }
Point operator/(const Point& p, const int divisor) { if (divisor == 0) throw DivideByZeroException(); return Point(p.x() / divisor, p.y() / divisor); }