Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mgiza.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mgizapp/src/logprob.h')
-rw-r--r--mgizapp/src/logprob.h217
1 files changed, 0 insertions, 217 deletions
diff --git a/mgizapp/src/logprob.h b/mgizapp/src/logprob.h
deleted file mode 100644
index 14696ac..0000000
--- a/mgizapp/src/logprob.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
-
-EGYPT Toolkit for Statistical Machine Translation
-Written by Yaser Al-Onaizan, Jan Curin, Michael Jahr, Kevin Knight, John Lafferty, Dan Melamed, David Purdy, Franz Och, Noah Smith, and David Yarowsky.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-USA.
-
-*/
-#ifndef _LOGPROB_H
-#define _LOGPROB_H
-
-// Routines to perform integer exponential arithmetic.
-// A number x is represented as n, where x = b**n
-// It is assumed that b > 1, something like b = 1.001
-
-#include <iostream>
-#include <math.h>
-#include <algorithm>
-
-//#define MAX(A,B) ((A) > (B) ? (A) : (B))
-//#define MIN(A,B) ((A) > (B) ? (B) : (A))
-
-
-class LogProb {
-public:
- // mj for cross entropy
- double base2() const {
- return (logr * logb2 / log(2));
- }
-
- // Constructors
- LogProb() : logr(zeron) {}
- LogProb(const LogProb &obj) : logr(obj.logr) {}
- LogProb(double x) : logr(x == 0.0 ? zeron : round(log(x)/logb2)) {}
- // destructor
- ~LogProb() {} // default destructor
-
- operator double() const // converts logr to (double) b**logr
- {
- if (logr < nmin) return ntof[0];
- if (logr > nmax) return ntof[nmax-nmin];
- return ntof[logr-nmin];
- }
-
- LogProb &operator=(const LogProb &obj) { logr = obj.logr; return *this; }
- int operator!() const { return logr == zeron; }
-
- // iostream friend specifications
- friend std::ostream& operator<<(std::ostream& os, const LogProb &obj);
- friend std::istream& operator>>(std::istream& is, LogProb &obj);
- friend std::ostream& operator<<=(std::ostream& os, const LogProb &obj);
- friend std::istream& operator>>=(std::istream& is, LogProb &obj);
-
- // arithmetic operators
- LogProb &operator+=(const LogProb &add) // logr2 = logb ( b**logr2 + b**logr1 )
- // Add two numbers represented as logarithms. Use the following method:
- // b**n + b**m = b**n(1 + b**(m-n)), assuming n >= m.
- {
- if (add.logr == zeron)
- return *this;
- if (logr == zeron)
- {
- logr = add.logr;
- return *this;
- }
- int a = add.logr - logr;
- if (a > 0)
- {
- a = -a;
- logr = add.logr;
- }
- if (a < tblbnd)
- return *this;
- logr += addtbl[a-tblbnd];
- return *this;
- }
-
- LogProb &operator-=(const LogProb &); // logr2 = logb ( b**logr2 + b**logr1 )
- LogProb operator*(const LogProb &mul) const // logr3 = logr2 + logr1
- {
- LogProb result; // start out with result == 0
- if ((logr != zeron) && (mul.logr != zeron))
- result.logr = std::max(logr+mul.logr, zeron);
- return result;
- }
- LogProb operator*(double x) const // logr3 = logr2 + logr1
- {
- return (*this)*(LogProb)x;
- }
- LogProb operator^(const int i) const // logr2 = logr1 * i
- {
- LogProb result; // start out with result == 0
- // if ((logr != zeron) && (mul.logr != zeron))
- result.logr = logr * i ;
- return result;
- }
- LogProb &operator*=(const LogProb &mul) // logr2 += logr1
- {
- if ((logr == zeron) || (mul.logr == zeron))
- logr = zeron;
- else
- logr = std::max(logr+mul.logr, zeron);
- return *this;
- }
- LogProb operator/(const LogProb &div) const // logr3 = logr2 -logr1
- {
- LogProb result;
- if (logr != zeron)
- result.logr = std::max(logr - div.logr, zeron);
- return result;
- }
- LogProb &operator/=(const LogProb &div) // logr2 -= logr1
- {
- if (logr != zeron)
- logr = std::max(logr - div.logr, zeron);
- return *this;
- }
- LogProb operator+(const LogProb &l) const // logr3 = logb ( b**logr2 + b**logr1 )
- { LogProb result(*this); result += l; return result; }
- LogProb operator-(const LogProb &l) const // logr3 = logb ( b**logr2 - b**logr1 )
- { LogProb result(*this); result -= l; return result; }
- LogProb power(const int n) const // logr2 = logr1 * int
- { LogProb result(*this); result.logr *= n; return result; }
-
- // Conditional operators
- int operator<(const LogProb &obj) const { return logr < obj.logr; }
- int operator<=(const LogProb &obj) const { return logr <= obj.logr; }
- int operator>(const LogProb &obj) const { return logr > obj.logr; }
- int operator>=(const LogProb &obj) const { return logr >= obj.logr; }
- int operator==(const LogProb &obj) const { return logr == obj.logr; }
- int operator!=(const LogProb &obj) const { return logr != obj.logr; }
- int operator<(double d) const { return ((double)*this) < d; }
- int operator<=(double d) const { return ((double)*this) <= d; }
- int operator>(double d) const { return ((double)*this) > d; }
- int operator>=(double d) const { return ((double)*this) >= d; }
- int operator==(double d) const { return ((double)*this) == d; }
- int operator!=(double d) const { return ((double)*this) != d; }
-
-
- LogProb &SetZero() { logr = zeron; return *this; } // representation of 0,
- LogProb &SetOne() { logr = onen; return *this; } // 1, and
- LogProb &SetInf() { logr = infn; return *this; } // inf in logarithm domain
-
-private:
- int logr; // a representation of logarithm
- // static constants
- static const int initialized; // initialization flag
- static const double b;
- static const double logb2;
- static const int nmin, nmax;
- static const int tblbnd;
- static const int zeron, onen, infn; // zero, one, and inf in log domain
- static const int max_2byte_integer, min_2byte_integer;
-
- // Arithmetic computation Tables
- static double *ntof;
- static int *addtbl;
- static int *subtbl;
-
- static int Initialize();
-
-public:
- static void FreeTables();
- // constants for initializing LogProbs to 0 or 1
- static const LogProb zero;
- static const LogProb one;
- static const LogProb minus2;
- static const LogProb minus4;
- static const LogProb minus6;
- static const LogProb minus8;
- static const LogProb minus10;
- static const LogProb minus12;
- static const LogProb minus14;
- static const LogProb minus16;
-};
-
-// iostream friend operators
-inline std::ostream &operator<<(std::ostream& os, const LogProb &obj)
-{
- return os << (double) obj; // output in linear domain, b**logr
-}
-
-inline std::istream &operator>>(std::istream& is, LogProb &obj)
-{
- double d;
- is >> d;
- obj = d;
- return is;
-}
-
-inline std::ostream &operator<<=(std::ostream& os, const LogProb &obj) // write binary
-{
- os.write((const char *)&obj.logr, sizeof(obj.logr));
- return os;
-}
-
-inline std::istream &operator>>=(std::istream& is, LogProb &obj)
-{
- is.read((char *)&obj.logr, sizeof(obj.logr));
- return is;
-}
-
-#endif
-