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

📄 irbit1.pas

📁 Delphi Pascal 数据挖掘领域算法包 数值算法大全
💻 PAS
字号:
FUNCTION irbit1(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;
VAR
   newbit: boolean;
BEGIN
   newbit := (iseed AND ib14) <> 0;
   IF ((iseed AND ib5) <> 0) THEN newbit :=  NOT newbit;
   IF ((iseed AND ib3) <> 0) THEN newbit :=  NOT newbit;
   IF ((iseed AND ib1) <> 0) THEN newbit :=  NOT newbit;
   iseed := iseed SHL 1;
   IF (newbit) THEN BEGIN
      irbit1 := 1; iseed := iseed OR ib1
   END ELSE BEGIN
      irbit1 := 0; iseed := iseed AND (NOT ib1)
   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 *)
VAR
   mask: integer;
   newbit: boolean;
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(ib: integer): integer;
   BEGIN inot := maxint-ib 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;
BEGIN
   mask := maxint DIV 2;
   newbit := iand(iseed,ib14) <> 0;
   IF (iand(iseed,ib5) <> 0) THEN newbit :=  NOT newbit;
   IF (iand(iseed,ib3) <> 0) THEN newbit :=  NOT newbit;
   IF (iand(iseed,ib1) <> 0) THEN newbit :=  NOT newbit;
   irbit1 := 0;
   iseed := iand(2*iand(mask,iseed),inot(ib1));
   IF (newbit) THEN BEGIN
      irbit1 := 1;
      iseed := ior(iseed,ib1);
   END
END;

⌨️ 快捷键说明

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