public NumericValue pow(final NumericValue pow) {
NumericValue a = this;
if (Type.DECIMAL == a.getDatatype() && Type.INTEGER == pow.getDatatype()) {
return new SesameNumericValue(a.decimalValue().pow(pow.intValue()));
} else {
double r = Math.pow(a.doubleValue(), pow.doubleValue());
Type precision = maxPrecision(a, pow);
switch (precision) {
case INTEGER: