aboutsummaryrefslogtreecommitdiff
path: root/elymas/lib/math.ey
blob: cc9b2886f654cfe09192d304b7d024e84c94e965 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 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