]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Prevent to divide by zero and range out of 0..1
authorTeodor Sigaev <teodor@sigaev.ru>
Wed, 1 Jun 2005 11:46:09 +0000 (11:46 +0000)
committerTeodor Sigaev <teodor@sigaev.ru>
Wed, 1 Jun 2005 11:46:09 +0000 (11:46 +0000)
contrib/tsearch2/rank.c

index c6cbd1c9591fe72ff4bd0ea4184077fb9c943630..9098cc9ed6002134f95691c14f4f82b9b9ea8b5f 100644 (file)
@@ -288,6 +288,7 @@ calc_rank(float *w, tsvector * t, QUERYTYPE * q, int4 method)
 {
        ITEM       *item = GETQUERY(q);
        float           res = 0.0;
+       int        len;
 
        if (!t->size || !q->size)
                return 0.0;
@@ -303,10 +304,11 @@ calc_rank(float *w, tsvector * t, QUERYTYPE * q, int4 method)
                case 0:
                        break;
                case 1:
-                       res /= log((float) cnt_length(t));
+                       res /= log( (float)(cnt_length(t)+1) ) / log(2.0);
                        break;
                case 2:
-                       res /= (float) cnt_length(t);
+                       len = cnt_length(t);
+                       if ( len > 0 )  res /= (float)len; 
                        break;
                default:
                        /* internal error */
@@ -607,10 +609,11 @@ rank_cd(PG_FUNCTION_ARGS)
                case 0:
                        break;
                case 1:
-                       res /= log((float) cnt_length(txt));
+                       res /= log( (float)(cnt_length(txt)+1) );
                        break;
                case 2:
-                       res /= (float) cnt_length(txt);
+                       len = cnt_length(txt);
+                       if ( len > 0 )  res /= (float)len; 
                        break;
                default:
                        /* internal error */