return (PROB) pow(2.0, (double) Score/INTSCALE);\r
}\r
\r
-static const double log2e = log2(exp(1.0));\r
-\r
-double lnTolog2(double ln)\r
- {\r
- return ln*log2e;\r
- }\r
-\r
-double log2(double x)\r
- {\r
- if (0 == x)\r
- return MINUS_INFINITY;\r
-\r
- static const double dInvLn2 = 1.0/log(2.0);\r
-// Multiply by inverse of log(2) just in case multiplication\r
-// is faster than division.\r
- return log(x)*dInvLn2;\r
- }\r
-\r
-SCORE ProbToScore(PROB Prob)\r
- {\r
- if (0.0 == Prob)\r
- return MINUS_INFINITY;\r
-// return (SCORE) floor(INTSCALE*log2(Prob));\r
- return (SCORE) log2(Prob);\r
- }\r
+//#if 0\r
+//static const double log2e = log2(exp(1.0));\r
+//\r
+//double lnTolog2(double ln)\r
+// {\r
+// return ln*log2e;\r
+// }\r
+//\r
+//double log2(double x)\r
+// {\r
+// if (0 == x)\r
+// return MINUS_INFINITY;\r
+//\r
+// static const double dInvLn2 = 1.0/log(2.0);\r
+//// Multiply by inverse of log(2) just in case multiplication\r
+//// is faster than division.\r
+// return log(x)*dInvLn2;\r
+// }\r
+//#endif\r
+\r
+//SCORE ProbToScore(PROB Prob)\r
+// {\r
+// if (0.0 == Prob)\r
+// return MINUS_INFINITY;\r
+//// return (SCORE) floor(INTSCALE*log2(Prob));\r
+// return (SCORE) log2(Prob);\r
+// }\r
\r
WEIGHT DoubleToWeight(double d)\r
{\r
return BTEq2((BASETYPE) b1, (BASETYPE) b2);\r
}\r
\r
-const double dLn2 = log(2.0);\r
-\r
-// pow2(x)=2^x\r
-double pow2(double x)\r
- {\r
- if (MINUS_INFINITY == x)\r
- return 0;\r
- return exp(x*dLn2);\r
- }\r
-\r
-// lp2(x) = log2(1 + 2^-x), x >= 0\r
-double lp2(double x)\r
- {\r
- return log2(1 + pow2(-x));\r
- }\r
-\r
-// SumLog(x, y) = log2(2^x + 2^y)\r
-SCORE SumLog(SCORE x, SCORE y)\r
- {\r
- return (SCORE) log2(pow2(x) + pow2(y));\r
- }\r
-\r
-// SumLog(x, y, z) = log2(2^x + 2^y + 2^z)\r
-SCORE SumLog(SCORE x, SCORE y, SCORE z)\r
- {\r
- return (SCORE) log2(pow2(x) + pow2(y) + pow2(z));\r
- }\r
+//const double dLn2 = log(2.0);\r
\r
-// SumLog(w, x, y, z) = log2(2^w + 2^x + 2^y + 2^z)\r
-SCORE SumLog(SCORE w, SCORE x, SCORE y, SCORE z)\r
- {\r
- return (SCORE) log2(pow2(w) + pow2(x) + pow2(y) + pow2(z));\r
- }\r
+//// pow2(x)=2^x\r
+//double pow2(double x)\r
+// {\r
+// if (MINUS_INFINITY == x)\r
+// return 0;\r
+// return exp(x*dLn2);\r
+// }\r
\r
-SCORE lp2Fast(SCORE x)\r
- {\r
- assert(x >= 0);\r
- const int iTableSize = 1000;\r
- const double dRange = 20.0;\r
- const double dScale = dRange/iTableSize;\r
- static SCORE dValue[iTableSize];\r
- static bool bInit = false;\r
- if (!bInit)\r
- {\r
- for (int i = 0; i < iTableSize; ++i)\r
- dValue[i] = (SCORE) lp2(i*dScale);\r
- bInit = true;\r
- }\r
- if (x >= dRange)\r
- return 0.0;\r
- int i = (int) (x/dScale);\r
- assert(i >= 0 && i < iTableSize);\r
- SCORE dResult = dValue[i];\r
- assert(BTEq(dResult, lp2(x)));\r
- return dResult;\r
- }\r
+//// lp2(x) = log2(1 + 2^-x), x >= 0\r
+//double lp2(double x)\r
+// {\r
+// return log2(1 + pow2(-x));\r
+// }\r
\r
// SumLog(x, y) = log2(2^x + 2^y)\r
-SCORE SumLogFast(SCORE x, SCORE y)\r
- {\r
- if (MINUS_INFINITY == x)\r
- {\r
- if (MINUS_INFINITY == y)\r
- return MINUS_INFINITY;\r
- return y;\r
- }\r
- else if (MINUS_INFINITY == y)\r
- return x;\r
-\r
- SCORE dResult;\r
- if (x > y)\r
- dResult = x + lp2Fast(x-y);\r
- else\r
- dResult = y + lp2Fast(y-x);\r
- assert(SumLog(x, y) == dResult);\r
- return dResult;\r
- }\r
-\r
-SCORE SumLogFast(SCORE x, SCORE y, SCORE z)\r
- {\r
- SCORE dResult = SumLogFast(x, SumLogFast(y, z));\r
- assert(SumLog(x, y, z) == dResult);\r
- return dResult;\r
- }\r
-\r
-SCORE SumLogFast(SCORE w, SCORE x, SCORE y, SCORE z)\r
- {\r
- SCORE dResult = SumLogFast(SumLogFast(w, x), SumLogFast(y, z));\r
- assert(SumLog(w, x, y, z) == dResult);\r
- return dResult;\r
- }\r
+//SCORE SumLog(SCORE x, SCORE y)\r
+// {\r
+// return (SCORE) log2(pow2(x) + pow2(y));\r
+// }\r
+//\r
+//// SumLog(x, y, z) = log2(2^x + 2^y + 2^z)\r
+//SCORE SumLog(SCORE x, SCORE y, SCORE z)\r
+// {\r
+// return (SCORE) log2(pow2(x) + pow2(y) + pow2(z));\r
+// }\r
+//\r
+//// SumLog(w, x, y, z) = log2(2^w + 2^x + 2^y + 2^z)\r
+//SCORE SumLog(SCORE w, SCORE x, SCORE y, SCORE z)\r
+// {\r
+// return (SCORE) log2(pow2(w) + pow2(x) + pow2(y) + pow2(z));\r
+// }\r
+\r
+//SCORE lp2Fast(SCORE x)\r
+// {\r
+// assert(x >= 0);\r
+// const int iTableSize = 1000;\r
+// const double dRange = 20.0;\r
+// const double dScale = dRange/iTableSize;\r
+// static SCORE dValue[iTableSize];\r
+// static bool bInit = false;\r
+// if (!bInit)\r
+// {\r
+// for (int i = 0; i < iTableSize; ++i)\r
+// dValue[i] = (SCORE) lp2(i*dScale);\r
+// bInit = true;\r
+// }\r
+// if (x >= dRange)\r
+// return 0.0;\r
+// int i = (int) (x/dScale);\r
+// assert(i >= 0 && i < iTableSize);\r
+// SCORE dResult = dValue[i];\r
+// assert(BTEq(dResult, lp2(x)));\r
+// return dResult;\r
+// }\r
+//\r
+//// SumLog(x, y) = log2(2^x + 2^y)\r
+//SCORE SumLogFast(SCORE x, SCORE y)\r
+// {\r
+// if (MINUS_INFINITY == x)\r
+// {\r
+// if (MINUS_INFINITY == y)\r
+// return MINUS_INFINITY;\r
+// return y;\r
+// }\r
+// else if (MINUS_INFINITY == y)\r
+// return x;\r
+//\r
+// SCORE dResult;\r
+// if (x > y)\r
+// dResult = x + lp2Fast(x-y);\r
+// else\r
+// dResult = y + lp2Fast(y-x);\r
+// assert(SumLog(x, y) == dResult);\r
+// return dResult;\r
+// }\r
+//\r
+//SCORE SumLogFast(SCORE x, SCORE y, SCORE z)\r
+// {\r
+// SCORE dResult = SumLogFast(x, SumLogFast(y, z));\r
+// assert(SumLog(x, y, z) == dResult);\r
+// return dResult;\r
+// }\r
+\r
+//SCORE SumLogFast(SCORE w, SCORE x, SCORE y, SCORE z)\r
+// {\r
+// SCORE dResult = SumLogFast(SumLogFast(w, x), SumLogFast(y, z));\r
+// assert(SumLog(w, x, y, z) == dResult);\r
+// return dResult;\r
+// }\r
\r
double VecSum(const double v[], unsigned n)\r
{\r