bcd.avm 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #
  2. # This module defines operations on signed integers represented in
  3. # binary converted decimal, type %bnLX, with a boolean for the sign
  4. # which is true if it's negative, and the digits in order of increasing
  5. # significance.
  6. #
  7. # Copyright (C) 2010 Dennis Furey
  8. #
  9. # abs (7)
  10. # bleq (711)
  11. # brange (1377)
  12. # choose (21056)
  13. # difference (4196)
  14. # division (3330)
  15. # factorial (17822)
  16. # fromint (960)
  17. # gcd (3382)
  18. # negation (15)
  19. # odd (20)
  20. # power (22226)
  21. # predecessor (536)
  22. # product (18416)
  23. # quotient (3323)
  24. # remainder (3323)
  25. # sgn (18)
  26. # successor (542)
  27. # sum (4172)
  28. # tenfold (19)
  29. # toint (379)
  30. #
  31. # compressed with granularity 66
  32. #
  33. #
  34. # This program is free software; you can redistribute it and/or modify
  35. # it under the terms of the GNU General Public License as published by
  36. # the Free Software Foundation; version 3.
  37. #
  38. # This program is distributed in the hope that it will be useful,
  39. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  40. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  41. # GNU General Public License for more details.
  42. #
  43. # You should have received a copy of the GNU General Public License
  44. # along with this program; if not, write to the Free Software Foundation,
  45. # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  46. #
  47. {iwKwEkwhGiwgIsKvwoJGGivpgG[J{jsimJf{gz]ZxwZ`fx]XsN{Fez_IHsjxjfu?FkHNp@wwGFsiPn
  48. xIZl?KjdkznGGioZuBHt^sF_SIn<dSj_gggXsihdxhHngAaG>`vDvggxvniwRDiNH<dgUFh{hz^ve[K
  49. oggZiLcFhzp^l^AvKZHvF[_Ssnfjsdt^wDoJNFJ[feQD{J=Zty>jeFp{zpgn^pW@n<AngoFy>B[ehqG
  50. xrHkGoZhkEh]D>^Zd^f_wDlSHrfeXoJjyFvgZ]HcFFidV_roPfJZnZzkR^neRv^sHwZoPpd@<Nx`hyJ
  51. \<N_z?HcSFqjFSVZnKJ{h\dGFnDdxiFhx{DgDj_PwhxpkP^yKIIvDF^`?QBBgO_oHOJ{Fpfn{N>jvfv
  52. kOOivgFEOHf`{Hg`iH{^GRn>jtGxVFSVvjkJ{fffRVd`{FqbJ>KKoIJyIxWKuNkGFSVZyKIIvgFxn>g
  53. oIT`NEJkHgIFajKuNKKnfyHGonqFvkOOivvvxVfOFd^\hxoFvFpetioxgJkHjFw\KNLf^arjggoivhg
  54. fwDFfniHOhgrFONcxoioIhzoFxFskgj<fKGFSWzyKJ{vfgF{FiHf<^xaUDfoFm[EZgHtFOyFy^F_{AO
  55. [zpyFGonaPgfyHkKvhgFdx\FJIEHtbIDfdE[F{QJtfkHAUDhyox>t{`QTGjLyD^^^arjgNPp{fpgNiN
  56. fP>f`a<`gu{EXl?`^nOF^TpGoioAkX{<fywtjuBtxheYhGgkKxiFPiNj<pd<hd>MyFoFUPFgFP>fSvo
  57. EphwXoVfKvQI{thoptkKGeoVpiIxffn\\f^nF^]ypf]<IFt?NkmPf^havhoCgIoy>d{^QNRjtLyE^xj
  58. ir{iHs^paGhf^F=@fFjDh`haoDFjeF{IJtG?HwXnRsKpGDOZzGj@G_ZDQGzrxoYviFhpeFjni@fL`gH
  59. npPnSHlteghazhnchwXnSD_{aO[zG[KvvkOoPcknoziEFGFF\P^<`Hpw\\AFoFDpPbnklpFljavhocn
  60. sKm>d{bQEpeV{elEQHc_MkGgD{vgFaFfoDfJFXGLg><MFaoHJdkF{YJu>vhwXnRsKm>kQPyZ{GffAWF
  61. iGaVzvz{gNFfha>h_M??fLOGHtaHbmXnLmd^zpSvo>[OioEZufqwKqo_ZEI`oFjrgFjggPiKwGGNfff
  62. ^<fP_IJu<MAfo>DPnWFgxYFdjavhocf{{EGlsJOaoKvkN`nvcXkPjgH{OGsviFffhfiD@fHVD<ONf=@
  63. SfaoE>gGvkoOhDjh{aPhruOaoZjEZ{dyzFPNyPomFvgHolJiv`rlnpgGGLm@]NLfl=>pho_HNWmXn_^
  64. `knKKldnSS?Zff{AoKqwxyyyU<NuqMkGH^JIojwqxfzhgnfnf^d@hlLiJl]=Axg@h`mEjhvxnuNuJF{
  65. a@SFgcShOyXt_q{QgNgsyICp_onoOwsFFqhw[wFgKFndf^@>_^`<LgNj==AzhzoFiwQwZAoXdjPQw@k
  66. NsJOanqcQVqQ^hlQ[iarNzI^tVIeHfxgJIkx{zpgOFvffdfO=FFm<@GFOyFhtGhFxgzjLoIXdinijEO
  67. aoZjKXikNObNfFFQZmkH^S[X[XyVA<oXkv{r[O{yveFoHfnfff@@g<OnkHaFeSwAFmXkQw<<fflnmYX
  68. ?Zjf{AnIhkModoxfrteP`gQFpnjtgdt{N]pOGxniRiLC\[qs{ziGPfhjjff>LMFOFDpd@WDi<jPnFxg
  69. MDlNjO^kuXMXvjK``[KUML[\g?Htg@fZgPgYFk=qYYV\dWINeyv_^TarqC{[S[NwIQg_Fzff<FgFA=J
  70. niXh?OH^\gQwZAoXh>uXQvKDqWfYbLSf`KHvqZnncsNQHlJQKlGDON\BXy[IM\cbU^Syc{zyxpg=PfG
  71. GnffgPv\>H>^ffG<FnDknkvu?IIXh>sKvcIAPKMF[h^Exp?OvgShnj]DsjyeXnd<iP[qx`\`YCmcv{^
  72. [we{{[vngFfoNiYkndeIGGMFgNHSJmX{Qw<DGgG?FSXIFzAvdVCvh`TvDkr>HzffPhj^niCkFDFhPX{
  73. SgFni@\=YJqveZoRU{Uz{S{MNiPfpoOOOjwHLP<dHdAGAlGaoDkngXN?<^a<nQvSWDLCwE=LrSjn\kr
  74. AJPcnGOnN^^nriPXwSod=n\c\F{n<apqN?AwEczSk{[xndnfIFqIGKKKd=G<_NhQnm<sHn>lFfyKPhx
  75. m<`CsDANKwuNSjoGMPjA>[lefdXfmQB{SoeEj]]IxmEx=F>Sr\m[v[sAwK{{pNqOQHqQQOPqHpnNDnG
  76. gFG@<hht^_DyEXf@ChL_Z{_z@KwuQVnUm<sh=gG]KgAMoyYSiN<@SSRI]b<cunB[oD=zQeZT[Yko{qG
  77. QVpqQQQOPqHn=H_XNGGN<fK^PyO`]CF`{Skooxskt{]NgPhrnwDhi<SGfQMoy@ytAEzQG>=X@Sh^H[`
  78. DayzU[nCyFaz{szgFfiHfqQQQQQQH\^lGD\oXnTAjznYFSjgyXwJkHh{SkooxgNnlYjkSfmltKJhQMo
  79. vfQL<nZ\<hj[d<T[<uZVH\cyTEfQ>[xAocs{nfnoFiGOQQQQQQ>nlfGDaMuL@\=Ngz{Qofv{?zhgeZv
  80. kqohvxoF]LCipfzXJgnsJ<ggAPXnkIwM\x<MY<mTFS]XnCozcJbMznckCwSysfnfg>foOQQQQQO@\HP
  81. LV[uqNSkl{ljkn{?zgy`jvN{kqXvjkl{GFnpopi@dyw<nobY_X[KgAPl^gYFpiFZ<`R[WDoAoZD>v<d
  82. [lMbFLSkcwK{[QINiGFiIIOPqQ<]MNE{SIPkqogoxGxKw?zkKnKH^J^aAwxKxGgxkl{f{PhoQNySVDi
  83. yOnp{KQCTO\[GgA?sn]n`]^XdHZoL<`Rx\H\=ZDBdcqplSic{{YwNo>ni@ffiGNqPo^<WwLQQXvjkpv
  84. xn?zkKpKKoJkHfnjfI`kqogoxGxKw?zkKnKH\nfpqJGEGO{dmOPozGcSQ_UJ?owX`wgEe\`t<@=Scpn
  85. yclAPC_ab[^PAyv[kssQIMMNF^fiGFoEQ={pzp>v{GxKzK^njx{XvxnOgoHKnneNwm>]QXvjkpvxn?z
  86. kKpKKoJkHfnhiGQ>HbJtSQZ^pGLx{?{vuqCTrj<yP^KXaP`^<x<_E>I\hRO@QqD@[pU[YEE{aw{[qGP
  87. fdfhffhfht>CrInhkl{xKzx{>kpjzOgoE?xhg_xhg^{XhlK_\PLjkn{?{_xhgKKsJkH`vxo?xhgphrT
  88. QPgHcOSQHhsDOJkHozQ[k{qqUsIga@=Hx=P_tX\q\E<KFVecu<c{mTLSocz[J{{QPndfnfeFfnqN]ya
  89. IG<{woxLx{?JkHdxnK_]?xhg^{PdvGynnDKHbHftXDN{?{l{woxF{HhsJkH`KnnfKnnjGyngd?W^LQN
  90. >Gf\tgOEOyOyHf_oxFQOKuQzjYSQ]sIp=C\VoO\GP\>x<=CuB[WsHeZL@[o]wL[[{yNfhpf`ffNhjH=
  91. qjpfx{CJkH`vxo?xhgNnjtHTksGH\xn?fDxnLvvnjNx]@N?{kKm?oxHvxn_oHIjD{GFtksGHGynoDKH
  92. ^JFWa>aG<{<O\V<[OEKlfnogoG^^KKleQzz[OcSqT[nQ[]Gh`wfn^[dL[rdr=UzFCt\]>tZ[qSsqQNn
  93. n`f`^aQLLqABGOgoE?xhg_xhg^{HhpNwd>]?oD^FfnjeHhg^aAGI\M@=KKmogoEJkHlzgFxhf_a>gyn
  94. ndKH`HfKH^FgGFveM=]QPozMHhj_NxoOFo{HfsjOgoG^aPo{Sxz[PuqYQqg{QquDj<Ol`[^E@oHx^mx
  95. LCtI==t[vmZyzfgO@N`fOOeJUnd{GFtkoGK^{Hhr?oFIj?dePGFxiHjzBEGK\\?W^<ogoE?xhg_xhg^
  96. {@jz@hlBA?oE_fFnjFrhgnX`jzL\@>pooxCDgxFOFttpOxNgFBpxzoFho^^KKnaSx{p[OuyJ[Rm`sXJ
  97. mORkLy?]xJAFWd<MTm[`d@Cu`u{JA{qGFP\eDoYAptHkoGI\xo?o\_oFKhVndjXF_T@hr==?ttMLxtF
  98. lmHKnnjGxnoLkoGI\xnK?]_F`>njN_Php?=NoT=>K?]`Q@OgoHp<x`fy^a<kHaJpO_mKnfo?sjOgoG^
  99. aM_oxi[p{p[KcsQPpjyinNw=HcT=]TD=Wle<cl=Dcx`EAtoazpgPi=DiPqPkFKHtrtgFttLnnkJA=No
  100. LM@F@KhTJ?B<tLp@@gxnotKHdrtKHtzuGFw]@Ni`hz=D?W^<zu@tM@HpxoFvvqGQ`^\@njFN<_>goIN
  101. jD\iYKhng>tiOgoGfQC_oxiCo{SMyGQIXdqPZphJjZ>MQHCuc\^[l>auDexnxhaD]OebVX^hg`lmHdv
  102. =^NnD<\?F\A?]LLF@BD<_oFKh>hgo_Bhg`lXEGj\D<lLzlEJHXlXD<\MAJpkT]uPg>TpgrVaEUHd\fa
  103. ItNOyfhdsJh{oFhF^qxvxnvqtx{Fvp[PmQwODkZ_FbedQUTl><@L`[eeX=HSUHqPdoQpzwyGH\@@Jda
  104. ?gfx\>=LQGFvtHPhn<HAGF\=>J^_DJ?@<lL=?NOnIa>kLDPa=PFE@@@frq==BFxnQHg=in`{Bfo_GfQ
  105. OwHflfeQJkHjSVpZj@yP<UWPBLKJqv?f__]y\EV>MuWOIPwzqQ_Kp^FdFO<eMM@N<HfvLN<fh\Jd`eN
  106. `@\\LOHyBIKQn<Dh<PnL<=MHd\tp@\hgoEPfa?HteKnfn_G^o{HflxhfiBmDwiTFRs@xhYm^b<=]UNU
  107. tPYPiHAOylrQF]LnpbDD<=Lte]EnN_LTPA@Ne>N@thnp>^<fna<I`OFtIF@[>vxnpwPHW`{>fo?pdnv
  108. qPSmgP?hX=Fau[Ln>Pe\F_pn]UyFPUOhA^LMNFa@=>@\L=Hd`HbG<GPg<LLgRNA=BQmHdleD@AXkHiF
  109. uJt\mfi@{aNS>_i=YOQnCTD>ZmFQJwGsUQCn<ND=@QH?Ha@?F=RD\<L@fi>`<FOFpFeAwy=RyIoxhJt
  110. k<V^>QyF<KWIRyPfDgAZkADlLd>F>PDh?NdMVkTILKvQ<=LiOioIhGlKzfGRv_HDOQJh?TtmILPi@lL
  111. >m?n=Qb^<SKnFALshoK>lRhkqg@ei<N>o_FdOnRvGwDM<`LE@pwXoRGOyHy^eqQKS?i<tiGCQ@RH^jQ
  112. [He<<]=[g@dZPsHAUDiSu\VsVnQL?^Nd@]=oaPlH\klpg^vPoFbQ=QhqFf_ODWNpdbmN]=MXn^hN{GG
  113. I@]tOQ@SH^sGeE@fj=GHxh@bvPg^Jn\^@\W_^YF@HnPob@@SvgMHORLrNzhA?D_^M<@GqD\DI]PF{hp
  114. @Dl@y?JIA`x{=@@@OESTvG_oK<N?MHGKgFr\rO=GyGHq=DMKHgPk`vhgQ_PzB`hnEDL@bgPfM<aTp>>
  115. N>`\<