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
|