Advertisement
Searinox

Untitled

Aug 2nd, 2020 (edited)
2,016
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.   154  ' ===============================================================================================================================
  2.   155  ' #MATH# ========================================================================================================================
  3.   156  'init
  4.   157  def fnMax(x%,y%)=(x%>=y%)*x% + (x%<y%)*y%
  5.   158  def fnMin(x%,y%)=(x%<=y%)*x% + (x%>y%)*y%
  6.   159  def fnXor(x%,y%)=(x% or y%)-(x% and y%)
  7.   160  def fnMaskL(k%)=(k%<1)*0+(k%>31)*-1+(((k%<1)+(k%>31))=0)*fnXor(-1,2^(32-k%)-1)
  8.   161  def fnMaskR(k%)=(k%<1)*0+(k%>31)*-1+(((k%<1)+(k%>31))=0)*2^k%-1
  9.   162  def fnBit(k%)=((k%<0)+(k%>31))*0+(k%=31)*-1+(((k%<0)+(k%>=31))=0)*2^k%
  10.   164  'mathTest
  11.   165  print "fnXor",364,fnXor(5, 361),hex$(fnXor(5, 361))
  12.   166  print "fnMaskL","FF000000",fnMaskL(8),hex$(fnMaskL(8))
  13.   167  k% = 8 : gosub 184 : print "MaskL","FF000000",MaskL%,hex$(MaskL%)
  14.   168  print "fnMaskR","FF",fnMaskR(8),hex$(fnMaskR(8))
  15.   169  k% = 8 : gosub 189 : print "MaskR","FF",MaskR%,hex$(MaskR%)
  16.   170  print "fnBit","80",fnBit(7),hex$(fnBit(7))
  17.   171  k% = 7 : gosub 194 : print "Bit","80",Bit%,hex$(Bit%)
  18.   172  print "fnShiftL",-256,fnShiftL(-1, 8),hex$(fnShiftL(-1, 8))
  19.   173  n% = -1 : k% = 8 : gosub 199 : print "ShiftL",-256,ShiftL%,hex$(ShiftL%)
  20.   174  n% = 42 : k% = 4 : gosub 199 : print "ShiftL",672,ShiftL%,hex$(ShiftL%)
  21.   175  n% = 16 : k% = 0 : gosub 199 : print "ShiftL",16,ShiftL%,hex$(ShiftL%)
  22.   176  print "fnShiftR",-1,fnShiftR(-1, 8),hex$(fnShiftR(-1, 8))
  23.   177  n% = -1 : k% = 8 : gosub 207 : print "ShiftR",-1,ShiftR%,hex$(ShiftR%)
  24.   178  n% = 42 : k% = 4 : gosub 207 : print "ShiftR",2,ShiftR%,hex$(ShiftR%)
  25.   179  n% = -999 : k% = 2 : gosub 207 : print "ShiftR",-250,ShiftR%,hex$(ShiftR%)
  26.   180  end
  27.   181  'maxTest
  28.   182  print fnMax(3, 3) : print fnMax(1, 3) : print fnMax(-1, -3)
  29.   183  return
  30.   184  'MaskL
  31.   185  if k% < 1 then MaskL% = 0 : return
  32.   186  if k% > 31 then MaskL% = -1 : return
  33.   187  MaskL% = fnXor(-1, (2 ^ (32 - k%) - 1))
  34.   188  return
  35.   189  'MaskR
  36.   190  if k% < 1 then MaskR% = 0 : return
  37.   191  if k% > 31 then MaskR% = -1 : return
  38.   192  MaskR% = 2 ^ k% - 1
  39.   193  return
  40.   194  'Bit
  41.   195  if k% < 0 or k% > 31 then Bit% = 0 : return
  42.   196  if k% = 31 then Bit% = fnMaskL(1) : return
  43.   197  Bit% = 2 ^ k%
  44.   198  return
  45.   199  'ShiftL
  46.   200  if k% = 0 then ShiftL% = n% : return
  47.   201  if k% > 31 then ShiftL% = 0 : return
  48.   202  if k% < 0 then k% = k% * -1 : gosub 207 : ShiftL% = ShiftR% : return
  49.   203  'ShiftL% = (n% and fnMaskR(31 - k%)) * 2 ^ k%
  50.   204  ShiftL% = n% * 2 ^ k%
  51.   205  'if (n% and fnBit(31 - k%)) <> 0 then ShiftL% = (ShiftL% or fnMaskL(1))
  52.   206  return
  53.   207  'ShiftR
  54.   208  if k% = 0 then ShiftR% = n% : return
  55.   209  if k% > 31 then ShiftR% = 0 : return
  56.   210  if k% < 0 then k% = k% * -1 : gosub 199 : ShiftR% = ShiftL% : return
  57.   211  'ShiftR% = (n% and fnMaskR(31)) / 2 ^ k%
  58.   212  ShiftR% = n% / 2 ^ k%
  59.   213  'if (n% and fnMaskL(1)) <> 0 then ShiftR% = (ShiftR% or fnBit(31 - k%))
  60.   214  return
  61.   215  '
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement