⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irbit2.pas

📁 Delphi Pascal 数据挖掘领域算法包 数值算法大全
💻 PAS
字号:
FUNCTION irbit2(VAR iseed: integer): integer;
(* This routine runs much faster if you can perform bitwise logical operations
on integers.  For example, here is a TURBO Pascal version:
CONST
   ib1=1; ib3=4; ib5=16; ib14=8192; mask = 21;
BEGIN
   IF (iseed AND ib14) <> 0 THEN BEGIN
      iseed := ((iseed XOR mask) SHL 1) OR ib1;
      irbit2 := 1
   END ELSE BEGIN
      iseed := (iseed SHL 1) AND (NOT ib1);
      irbit2 := 0
   END
END; *)
(* Here is the slower version for other Pascal systems: *)
CONST
   ib1=1;
   ib3=4;
   ib5=16;
   ib14=8192;   (* Values chosen not to overflow 2-byte integers *)
   mask = 21;   (* ib1+ib3+ib5 *)
VAR
   mask1: integer;
FUNCTION iand(i1,i2: integer): integer;
   VAR
      i: integer;
   BEGIN
      IF ((i1=0) OR (i2=0)) THEN iand := 0
      ELSE BEGIN
         i := ord(odd(i1) AND odd(i2));
         i1 := i1 DIV 2; i2 := i2 DIV 2;
         iand := 2*iand(i1,i2) + i
      END
   END;
FUNCTION inot(i: integer): integer;
   BEGIN inot := maxint-i END;
FUNCTION ior(i1,i2: integer): integer;
   VAR
      i: integer;
   BEGIN
      IF ((i1=0) AND (i2=0)) THEN ior := 0
      ELSE BEGIN
         i := ord(odd(i1) OR odd(i2));
         i1 := i1 DIV 2; i2 := i2 DIV 2;
         ior := 2*ior(i1,i2) + i
      END
   END;
FUNCTION ieor(i1,i2: integer): integer;
   VAR
      i: integer;
   BEGIN
      IF ((i1=0) AND (i2=0)) THEN ieor := 0
      ELSE BEGIN
         i := ord((odd(i1) AND NOT odd(i2))
               OR (odd(i2) AND NOT odd(i1)));
         i1 := i1 DIV 2; i2 := i2 DIV 2;
         ieor := 2*ieor(i1,i2) + i
      END
   END;
BEGIN
   mask1 := maxint DIV 2;
   IF (iand(iseed,ib14) <> 0) THEN BEGIN
      iseed := ior(2*iand(ieor(iseed,mask),mask1),ib1);
      irbit2 := 1
   END ELSE BEGIN
      iseed := iand(2*iand(iseed,mask1),inot(ib1));
      irbit2 := 0
   END
END;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -