virtual double log_probability(Iter const & iter) const { int x = (int) (iter.emission(_slotID) + _offset); assert(x >= 0); if (x < _tblSize) return _logp_tbl[x]; return logprob(x); }
double log_probability(Iter const & iter) const { double log_prob = _func->log_probability(iter); if (std::isnan(log_prob)) throw QHMMException("NaN detected", "log_probability", false, _stateID, _slotID, iter.index(), iter.emission(_slotID)); // TODO: support higher dimensions! return log_prob; }