virtual Type infereSigType (const vector<Type>& args) { assert (args.size() == arity()); interval i = args[0]->getInterval(); if (i.valid & i.lo>0) { return castInterval(floatCast(args[0]), interval(log(i.lo), log(i.hi))); } else { return floatCast(args[0]); } }
virtual Type infereSigType(const vector<Type>& args) { assert(args.size() == arity()); // return castInterval(floatCast(args[0]|args[1]), interval()); // temporary !!! // return castInterval(args[0]|args[1], interval()); // temporary !!! interval i = args[0]->getInterval(); interval j = args[1]->getInterval(); return castInterval(args[0] | args[1], pow(i, j)); }
virtual Type infereSigType (const vector<Type>& args) { assert (args.size() == 1); return castInterval(floatCast(args[0]), interval(-1,1)); }