# Discrete mathematics useful in computer stuff # More complicated stuff in sublibs < # converts an array of digits into an integer # i.e. [ 1 2 3 ] 10 unbase => 321 # i.e. [ ] 10 unbase => 0 # 0 -> base to convert from # 1 -> array of digits # 0 <- resulting integer { ==b _ len _ ==l dearray 0 l { b mul add } rep } /unbase deff # converts an integer into an array of digits # i.e. 123 10 base => [ 3 2 1 ] # i.e. 0 10 base => [ ] # 0 <- base to convert to # 1 <- integer to convert # 0 -> resulting array of digits { ==b [ -01 { _ } { _ b mod -01 b div } loop -- ] } /base deff > /math defv # FIXME: INTEGRATE # # 0 -> float # # 0 <- the int portion of the float, rounded towards zero # [[ # /rbx :popqReg # # # allocate result int # ::internalAllocateInteger /rax :movqImmReg # /rax :callqReg # # # actual conversion # /rcx :popqReg # 8 /rcx :fld64MemDisp8 # 8 /rax :fistp64MemDisp8 # # # push int on program stack # /rax :pushqReg # # /rbx :pushqReg # :retn # ]] /eytrunc defv # vim: syn=elymas