Imaginary base numbers: Difference between revisions

m
J: bugfix
m (J: bugfix)
Line 1,627:
:
if.0=y do.,'0' return.end.
sq=:.*:x assert. 17 > sq
step=:. }.,~(1,|sq) +^:(0>{:@]) (0,sq) #: {.
seq=:. step^:(0~:{.)^:_"0
're im0'=.+.y
raw=: ,hfd(}.~0 i.~0=]),|:seq"0 (1,|x)*+.y
'im imf'=.(sign,1)*(0,|x)#:im0*sign=.*im0
trimfrac=. (#!.'.'~ 1 j. 2|.#{.1:)`}:@.((1<#)*'0'={:)
frac=. ,hfd (imf*|x)-.0 if.#frac do.frac=.'.',frac end.
trimfrac raw
frac,~(}.~0 i.~_1}.'0'=]) }:,hfd|:0 1|."0 1 seq re,im
}}"0 </lang>
}}"0
}}"0 </lang>
 
This ibdec can decode numbers from complex bases up to 0j6, but this ibenc can only represent digits in complex bases up to 0j4.
Line 1,641 ⟶ 1,643:
<lang J>
(ibenc i:16),.' ',.ibenc j.i:16
1030000 1020002000
1030001 1020002010.2
1030002 1030302010
1030003 1030302020.2
300 1030202020
301 1030202030.2
302 1030102030
303 1030101000.2
200 1030001000
201 1030001010.2
202 30 1010
203 301020.2
100 20 1020
101 201030.2
102 10 1030
103 100.2
0 0
1 20. 2
2 103010
3 103010.2
10300 102020
10301 102020.2
10302 101030
10303 101030.2
10200 1000 103000
10201 1000103000.2
10202 2030 103010
10203 2030103010.2
10100 2020 103020
10101 2020103020.2
10102 2010 103030
10103 2010103030.2
10000 2000 102000
(ibdec ibenc i:16),: ibdec ibenc j.i:16
_16 _15 _14 _13 _12 _11 _10 _9 _8 _7 _6 _5 _4 _3 _2 _1 0 1 1 2 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0j_16 0j_15 0j_14 0j_13 0j_12 0j_11 0j_10 0j_9 0j_8 0j_7 0j_6 0j_5 0j_4 0j_3 0j_2 0j_1 0 0j_1 0j2 0j1 0j4 0j3 0j6 0j5 0j8 0j7 0j10 0j9 0j12 0j11 0j14 0j13 0j16
0j16 0j15 0j14 0j13 0j12 0j11 0j10 0j9 0j8 0j7 0j6 0j5 0j4 0j3 0j2 0j1 0 2 0j_2 0j_3 0j_4 0j_5 0j_6 0j_7 0j_8 0j_9 0j_10 0j_11 0j_12 0j_13 0j_14 0j_15 0j_16
0j4 ibenc 42
10e0a
6,962

edits