freebsd-ports/japanese/FreeWnn-server/files/patch-Wnn-etc-hindo.c

129 lines
2.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Index: Wnn/etc/hindo.c
===================================================================
RCS file: /home/cvs/private/hrs/freewnn/Wnn/etc/hindo.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -p -r1.1.1.1 -r1.2
--- Wnn/etc/hindo.c 20 Dec 2008 07:13:30 -0000 1.1.1.1
+++ Wnn/etc/hindo.c 20 Dec 2008 15:22:40 -0000 1.2
@@ -5,7 +5,7 @@
/*
* FreeWnn is a network-extensible Kana-to-Kanji conversion system.
* This file is part of FreeWnn.
- *
+ *
* Copyright Kyoto University Research Institute for Mathematical Sciences
* 1987, 1988, 1989, 1990, 1991, 1992
* Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999
@@ -49,8 +49,8 @@
仮頻度がbのとき、頻度の更新の確率は 1 / ([b÷4]1)
但し b0の時は、頻度更新確率 0
-
- a == -1 <==> b == 0x7f = 127;
+
+ a == -1 <==> b == 0x7f = 127;
この時、このエントリーは、変換に決して用いられない
(コメントアウトされている)ことを表す。
9/1/89 H.T.
@@ -58,47 +58,48 @@
/** 整数引数の平方根関数。但し引数<0の時のエラーチェックはなし0を返す。*/
static int
-isqrt (i)
- int i;
+isqrt(int i)
{
- register int a, b;
+ register int a, b;
+
+ if (i <= 0)
+ return (0);
+
+ for (a = i, b = 1; b <<= 1, a >>= 2;);
+
+ while ((a = i / b) < b)
+ b = (b + a) >> 1;
- if (i <= 0)
- return (0);
- for (a = i, b = 1; b <<= 1, a >>= 2;);
- while ((a = i / b) < b)
- b = (b + a) >> 1;
- return (b);
+ return (b);
}
/** 実頻度a→仮頻度b */
int
-asshuku (hin)
- int hin;
+asshuku(int hin)
{
- register int c;
+ register int c;
- if (hin == -1)
- return (127);
- if (hin <= 4)
- return (hin);
- /* 大半は頻度0と想定してのスピードアップ。motoni1,2でも同じ */
-
- c = (isqrt ((hin <<= 1) + 1) + 1) & ~1;
- c += hin / c - 2;
- return (c < 126 ? c : 126);
+ if (hin == -1)
+ return (127);
+ if (hin <= 4)
+ return (hin);
+ /* 大半は頻度0と想定してのスピードアップ。motoni1,2でも同じ */
+
+ c = (isqrt((hin <<= 1) + 1) + 1) & ~1;
+ c += hin / c - 2;
+
+ return (c < 126 ? c : 126);
}
/** 仮頻度b→実頻度(min)a */
/*
int
-motoni1(hin)
-int hin;
+motoni1(int hin)
{
register int c;
if(hin == 127) return(-1);
- if(hin <= 4) return(hin);
+ if(hin <= 4) return(hin);
c = hin >> 2;
return( (hin - (c << 1)) * (c + 1) );
}
@@ -106,15 +107,17 @@ int hin;
/** 仮頻度b→実頻度(mid)a */
int
-motoni2 (hin)
- int hin;
+motoni2(int hin)
{
- register int c;
+ register int c;
+
+ if (hin == 127)
+ return (-1);
+
+ if (hin <= 4)
+ return (hin);
+
+ c = hin >> 2;
- if (hin == 127)
- return (-1);
- if (hin <= 4)
- return (hin);
- c = hin >> 2;
- return ((hin - (c << 1)) * (c + 1) + (c >> 1));
+ return ((hin - (c << 1)) * (c + 1) + (c >> 1));
}