PoshCode Archive  Hex Artifact Content

Artifact 0ff0018f9608c8c54ebaa57fff2fcc5c2b38a107e3f9a00378251b392b4ef469:

  • File divide-integer.ps1 — part of check-in [db9c13417b] at 2018-06-10 14:25:36 on branch trunk — powershell does all dividing by doubles, even integers, so often to simulate a interger division you have to [math]::floor the quotient. Here are some functions to do pure integer division (user: karl prosser size: 885)

0000: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 61 73 63 69  # encoding: asci
0010: 69 0d 0a 23 20 61 70 69 3a 20 70 6f 77 65 72 73  i..# api: powers
0020: 68 65 6c 6c 0d 0a 23 20 74 69 74 6c 65 3a 20 64  hell..# title: d
0030: 69 76 69 64 65 20 69 6e 74 65 67 65 72 0d 0a 23  ivide integer..#
0040: 20 64 65 73 63 72 69 70 74 69 6f 6e 3a 20 70 6f   description: po
0050: 77 65 72 73 68 65 6c 6c 20 64 6f 65 73 20 61 6c  wershell does al
0060: 6c 20 64 69 76 69 64 69 6e 67 20 62 79 20 64 6f  l dividing by do
0070: 75 62 6c 65 73 2c 20 65 76 65 6e 20 69 6e 74 65  ubles, even inte
0080: 67 65 72 73 2c 20 73 6f 20 6f 66 74 65 6e 20 74  gers, so often t
0090: 6f 20 73 69 6d 75 6c 61 74 65 20 61 20 69 6e 74  o simulate a int
00a0: 65 72 67 65 72 20 64 69 76 69 73 69 6f 6e 20 79  erger division y
00b0: 6f 75 20 68 61 76 65 20 74 6f 20 5b 6d 61 74 68  ou have to [math
00c0: 5d 3a 3a 66 6c 6f 6f 72 20 74 68 65 20 71 75 6f  ]::floor the quo
00d0: 74 69 65 6e 74 2e 20 48 65 72 65 20 61 72 65 20  tient. Here are 
00e0: 73 6f 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74  some functions t
00f0: 6f 20 64 6f 20 70 75 72 65 20 69 6e 74 65 67 65  o do pure intege
0100: 72 20 64 69 76 69 73 69 6f 6e 0d 0a 23 20 76 65  r division..# ve
0110: 72 73 69 6f 6e 3a 20 30 2e 31 0d 0a 23 20 74 79  rsion: 0.1..# ty
0120: 70 65 3a 20 66 75 6e 63 74 69 6f 6e 0d 0a 23 20  pe: function..# 
0130: 61 75 74 68 6f 72 3a 20 6b 61 72 6c 20 70 72 6f  author: karl pro
0140: 73 73 65 72 0d 0a 23 20 6c 69 63 65 6e 73 65 3a  sser..# license:
0150: 20 43 43 30 0d 0a 23 20 66 75 6e 63 74 69 6f 6e   CC0..# function
0160: 3a 20 64 69 76 69 64 65 2d 69 6e 74 65 67 65 72  : divide-integer
0170: 0d 0a 23 20 78 2d 70 6f 73 68 63 6f 64 65 2d 69  ..# x-poshcode-i
0180: 64 3a 20 38 36 39 0d 0a 23 20 78 2d 61 72 63 68  d: 869..# x-arch
0190: 69 76 65 64 3a 20 32 30 31 35 2d 30 34 2d 31 36  ived: 2015-04-16
01a0: 54 30 30 3a 33 33 3a 35 32 0d 0a 23 20 78 2d 70  T00:33:52..# x-p
01b0: 75 62 6c 69 73 68 65 64 3a 20 32 30 30 39 2d 30  ublished: 2009-0
01c0: 32 2d 31 32 54 32 33 3a 30 38 3a 30 30 0d 0a 23  2-12T23:08:00..#
01d0: 0d 0a 23 0d 0a 66 75 6e 63 74 69 6f 6e 20 64 69  ..#..function di
01e0: 76 69 64 65 2d 69 6e 74 65 67 65 72 20 28 5b 69  vide-integer ([i
01f0: 6e 74 5d 24 64 69 76 69 64 65 6e 64 20 2c 20 5b  nt]$dividend , [
0200: 69 6e 74 5d 24 64 69 76 69 73 6f 72 20 29 7b 20  int]$divisor ){ 
0210: 5b 69 6e 74 5d 24 6c 6f 63 61 6c 3a 72 65 6d 61  [int]$local:rema
0220: 69 6e 64 65 72 20 3d 20 24 4e 75 6c 6c 3b 72 65  inder = $Null;re
0230: 74 75 72 6e 20 5b 4d 61 74 68 5d 3a 3a 44 69 76  turn [Math]::Div
0240: 52 65 6d 28 24 64 69 76 69 64 65 6e 64 2c 24 64  Rem($dividend,$d
0250: 69 76 69 73 6f 72 2c 5b 72 65 66 5d 24 6c 6f 63  ivisor,[ref]$loc
0260: 61 6c 3a 72 65 6d 61 69 6e 64 65 72 29 3b 7d 0d  al:remainder);}.
0270: 0a 73 65 74 2d 61 6c 69 61 73 20 69 2f 20 64 69  .set-alias i/ di
0280: 76 69 64 65 2d 69 6e 74 65 67 65 72 0d 0a 0d 0a  vide-integer....
0290: 69 2f 20 31 30 20 33 0d 0a 0d 0a 66 75 6e 63 74  i/ 10 3....funct
02a0: 69 6f 6e 20 64 69 76 69 64 65 2d 69 6e 74 65 67  ion divide-integ
02b0: 65 72 70 69 70 65 20 28 5b 69 6e 74 5d 24 64 69  erpipe ([int]$di
02c0: 76 69 73 6f 72 20 29 0d 0a 7b 20 62 65 67 69 6e  visor )..{ begin
02d0: 20 7b 20 5b 69 6e 74 5d 24 6c 6f 63 61 6c 3a 72   { [int]$local:r
02e0: 65 6d 61 69 6e 64 65 72 20 3d 20 24 4e 75 6c 6c  emainder = $Null
02f0: 7d 0d 0a 20 20 70 72 6f 63 65 73 73 20 7b 20 5b  }..  process { [
0300: 4d 61 74 68 5d 3a 3a 44 69 76 52 65 6d 28 24 5f  Math]::DivRem($_
0310: 20 2c 24 64 69 76 69 73 6f 72 2c 5b 72 65 66 5d   ,$divisor,[ref]
0320: 24 6c 6f 63 61 6c 3a 72 65 6d 61 69 6e 64 65 72  $local:remainder
0330: 29 3b 20 7d 0d 0a 7d 0d 0a 73 65 74 2d 61 6c 69  ); }..}..set-ali
0340: 61 73 20 69 5c 20 64 69 76 69 64 65 2d 69 6e 74  as i\ divide-int
0350: 65 67 65 72 70 69 70 65 0d 0a 31 30 20 7c 20 69  egerpipe..10 | i
0360: 5c 20 33 0d 0a 0d 0a 31 2e 2e 31 30 20 7c 20 69  \ 3....1..10 | i
0370: 5c 20 33 0d 0a                                   \ 3..