new version of muscle 3.8.31
[jabaws.git] / binaries / src / muscle / intmath.cpp
index 5a09dd4..40c25bb 100644 (file)
@@ -8,31 +8,33 @@ PROB ScoreToProb(SCORE Score)
        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
@@ -69,97 +71,97 @@ bool BTEq(double b1, double b2)
        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