« first day (1459 days earlier)      last day (33 days later) » 

6:46 AM
@rak1507 i believe it's mediawiki's fault
 
 
3 hours later…
ngn
9:56 AM
@dzaima asking out of curiosity as an amateur linguist, how do you say "what's the point/why bother" in lv?
 
10:54 AM
@ngn "kāda jēga" (that 'ē' being a long [æ]). the literal translation is indeed just "what's the point" but it just doesn't sound as fun
 
ngn
11:49 AM
@dzaima but "point" as in "meaning" or "sense" (i looked it up), not the same word as a 2d "point" for example, or "." as punctuation, which would be "punkts"
 
well yeah (fwiw there's also the word "bezjēdzīgs" meaning "pointless" - literally, "without a point")
 
ngn
@dzaima interesting language. browsing random words from wiktionary, i can recognize some of them as almost identical with slavic. but that's not enough for me to get the gist of a paragraph of text. and when i listen to spoken lv, i don't get anything at all.
 
12:10 PM
@KamilaSzewczyk @ngn It reminds me of this anecdote ( jsoftware.com/papers/APLQA.htm ) : "I told Ken that I was completely unable to come up with a good translation for the APL function ravel, which had previously suffered the prosaic name “make list of” in Danish.
[He said,] “You should use the word you use when you have knitted something and you then undo the knitting — when you are removing the structure and are left with the thread.” Suddenly the term ravel made sense to me in a completely different way."
 
ngn
12:27 PM
@brgal "flatten" might have been more obvious, though now it's taken for monadic ∊ which flattens ranks and depths
 
12:42 PM
      ⎕FR←1287⋄⎕PP←34⋄⎕IO←0⋄41|6*⍳41
1 6 36 11 25 27 39 29 10 19 32 28 4 24 21 3 18 26 33 34 40 35 5 30 16 14 2 12 31 22 9 13 37 17 20 38 23 15 0 0 0
how do I get the last three to show up correctly?
 
that is loong
oh well
 
ah, code golfing?
 
@rak1507 yes indeed
@dzaima ok time to use this
 
12:46 PM
tio outdated though :/
 
lmao
I'll just give a repl.it link
@dzaima how do I consider a given argument as a long int
like in {⍵|6*⍳⍵}
 
@Razetime ⎕big (though 0L+ and 1L× are shorter)
 
thanks
@Adám I think this is a bug? Try it online!
 
@Razetime you need `|⌂big as otherwise ⌂big gets the extended |
 
ohhhhh
 
12:54 PM
and then you need to ¨ the `|⌂big
 
@ngn The name for monadic ∊ in Dyalog and the APL ISO standard is "Enlist", isn't it ?
"Flatten" would have been clearer as you said.
 
ngn
@brgal ah.. right, that was "enlist"
 
@Razetime Since you're generating consecutive powers you can do it just by multiplying by 6 and taking the modulus repeatedly. BQN's forward scan works well, and in dzaima/APL I think you could use , but I can't think of a clean way to do it in a mainstream APL.
 
@Marshall I ended up doing this: {⍵|∘.*⍨⍳⍵-1}1L×
 
@Razetime {⍵|∘.*⍨⍳⍵-1L}
 
1:06 PM
@Razetime Sure, but it's nice to know that you don't actually need long integers for this computation.
 
@dzaima hmm i could make float|big return a float
@dzaima (and i already have the facilities in-place to allow that from log)
 
@Marshall I'll keep that in mind for the problem solving contest
@dzaima perfect
 
(you can ⎕big⍣¯1 to not have the spam of Ls)
 
@Razetime one of the problems last year was literally just 2^n mod some number so I doubt they'd use that again
 
eh
can happen
I should just take the input as a long since this is code golf anyway
 
1:15 PM
@Razetime Boundaries are a little off but this is a nice strategy.
 
why's the tack there?
 
@Razetime It's a tack outer product.
 
oh.
 
You could get it to start at one using 1¨⌾⊏ on the outer product result, but this way is a little cleverer (remove up to to see the starting point for scan).
 
still need to get used to the BQN symbols
 
1:22 PM
@Razetime Skimming through the combinator tutorial would probably help.
 
I have gone through that
just that certain things just don't immediately pop up
 
@Razetime It's hopeless then.
 
It'll take some time, don't worry!
 
(You're probably further along than I thought)
 
trying to get the closest shape to a square for a given number of cells
      {{⍵⊃⍨⌊.5×≢⍵}a/⍨⍵=×/¨a←,⍳2/⍵}40
5 8
This just looks too long
 
1:26 PM
@Adám For the Dyalog 2019 contest, Easy Problem Set 2, Problem 1 UbbiDubbi, I would have two solutions :
⋄ ('[aeiouAEIOU]'⎕R {'ub',⍵.Match}) 'I am a good example' and
⋄ {¯1↓↑({1=⍺∊'aeiouAEIOU':'ub',⍺,⍵ ⋄ ⍺,⍵}/⍵,' ')} 'I am a good example' The last one according to cmpx is faster. Is there other interesting or faster solutions ? Thanks.
 
the backticks don't work in multiline messages
just SE chat things
better to post as separate messages
 
@Razetime Thanks for the suggestion !
⋄ ('[aeiouAEIOU]'⎕R {'ub',⍵.Match}) 'I am a good example'
 
@brgal
┌→──────────────────────────────────┐
│ubI ubam uba guboubod ubexubamplube│
└───────────────────────────────────┘
 
 ⋄{¯1↓↑({1=⍺∊'aeiouAEIOU':'ub',⍺,⍵ ⋄ ⍺,⍵}/⍵,' ')} 'I am a good example'
 
      ⋄{¯1↓↑({1=⍺∊'aeiouAEIOU':'ub',⍺,⍵ ⋄ ⍺,⍵}/⍵,' ')} 'I am a good example'
ubI ubam uba guboubod ubexubamplube
why the a← at the beginning?
 
ngn
1:33 PM
@Razetime oops
 
@brgal do you need the 1=?
 
@Razetime You're right. I do not need it.
 
ngn
⋄{a⊃⍨⊃⍋+/↑a←⍸⍵=×/¨⍳2⍴⍵}40
 
@ngn
┌→──┐
│5 8│
└~──┘
 
ngn
@Razetime ^
 
1:36 PM
epic
 
ngn
shorter: {a⊃⍨⊃⍋+/↑a←⍸⍵=∘.×⍨⍳⍵}
 
@brgal Here's one I found:
      ⎕IO←0⋄{∊⍵,⍨⍪⍬ 'ub'[⍵∊'aeiouAEIOU']}'I am a good example'
ubI ubam uba guboubod ubexubamplube
 
what i had - 2.6x faster than Razetime's
 
ngn
@brgal ⍵.Match looks expensive
V←'[aeiou]'⋄UbbiDubbi←V⎕r'ub&'⍠1 (i was optimizing for size rather than speed)
 
1:49 PM
@Razetime Thanks for your solution !
 
is there a guide on optimizing APL? for example, what if fast, what is slow, what are the special combinations, etc...
 
keep things flat
is the general advice
 
@dzaima Not the same result when I copy back to my Dyalog.
{i←(1+2×⍵∊'aeiouAEIOU')/⍳≢⍵ ⋄ ('ub',⍵)[i{⍵+(⍵=0)×2+⍺}{⍵+0,⍨2∧/⍵}0,⍨2=/i]} 'I am a good example'
IbI Ibam Iba gIboIbod IbexIbamplIbe
 
@KamilaSzewczyk the simple goal is to maximize the amount of operations working on long simple scalar arrays. Somewhere you should be able to find a list of Dyalog idioms
@brgal it expects ⎕IO←1
 
1:55 PM
@brgal my entry changed your ⎕IO value
 
this is mad
 
@dzaima Sorry I just set ⎕IO←0
 
what is the {} responsible for here
 
@KamilaSzewczyk throwing away the result or something
 
@KamilaSzewczyk somewhat related: stackoverflow.com/a/56878879/4568534
 
1:56 PM
it's very surprising that 1÷7 isn't automatically optimized to ÷7, which is a whole lot faster
 
2:09 PM
codegolf.stackexchange.com/questions/38282/… what does "Traversing diagonally" mean here?
I don't get it at all
 
@ngn Thanks a lot ! It is faster than my two solutions.
 
ngn
@brgal in case you're wondering: the vowels are in a variable because they're used in Rovarspraket and PigLatin too
 
@ngn Did you solve all the problems of the 2019 contest ? The chess one with the legal moves seems really hard...
 
ngn
@brgal yes, wanna see them?
 
That could be a nice Dyalog blog entry !
or a Vector article !
 
ngn
2:24 PM
:Namespace Contest2019
AboutMe←Reaction←,⊂''
:Namespace Problems
⎕io←0⋄Grille←{⍵[⍸' '=⍺]}⋄TransEnc←{∊(⍋⍺)⌷¨⊂⍉(⍵,¯1/⍺)⍴⍨⌽⌈÷⍨\≢¨⍺⍵}⋄TransDec←{,⍉↑(⍋⍋⍺)⌷¨⊂(⍵,¯1/⍺)⍴⍨⌈÷⍨\≢¨⍺⍵}
J←⎕a~'J'⋄TapEnc←{1↓'*'\⍨,0,⍪,⍉1+5 5⊤J⍳⍵}⋄TapDec←{J[5⊥⍉(⊢⍴⍨2,⍨2÷⍨≢)¯1+≢¨⍵⊆⍨⍵='*']}
V←'[aeiou]'⋄UbbiDubbi←V⎕r'ub&'⍠1⋄Rovarspraket←V'[a-z]'⎕r'&' '&o&'⍠1⋄PigLatin←(∊3⍴'\b'V)'((?=\w)[^aeiou]*)(\w*)'⎕r'&way' '\2\1ay'⍠1
AbbreviateIPv6←{1↓'x'~⍨'::'⎕r':0:'⍣≡':::+(.*)'⎕r':x:\1'⊢':0+'⎕r':'⊢':',⍵}⋄ExpandIPv6←{1↓':0+([^:]{4})'⎕r':\1'⊢':'⎕r':0000'⊢':','::'⎕r(':'⍴⍨9-+/⍵=':')⊢⍵}
 
holyyyyyyy
 
ngn
@brgal for lack of comments, they didn't give me enough points
i would much rather see the winning solutions, but alas..
 
@ngn :56840221 Thanks. I will have a look first to the Chess Problem set !
@ngn Unlike for the 2020 contest, I did not find on github the winning solutions of the 2019 contest.
 
ngn
@brgal chess solutions take about as much room as all other solutions combined :)
 
what in the world is that
it's amazing and i love it
 
2:35 PM
@ngn Legal moves in chess is a long story (en passant, castling...).
 
ngn
@brgal the winner was visiting this chat regularly. when i asked him if he's gonna publish his sources, he disappeared.
@KamilaSzewczyk if it's not clear: my solutions to dyalog's 2019 competition
 
@ngn do you mean the professional prize winner?
 
@ngn that's odd
 
ngn
@dzaima yes, the professional winner. i should have clarified i'm not a student.
 
@ngn (latest messages on sep 10 2019, so they didn't quite disappear then. (also heh))
 
ngn
2:43 PM
@dzaima heh - someone asked for it today, so it became interesting :)
 
@ngn I think that with the chess problem, you maybe the second one in the whole APL history to publish code able to generate legal chess moves in APL. The first one being in the 80s in a computer magazine.
 
Last seen 2 days ago
can probably contact him
 
ngn
@Razetime oh, that's interesting
@Razetime are you sure? it says "last seen 338d ago" for me
 
Check stackoverflow
 
ngn
ah right
 
3:02 PM
@ngn If you have any interest in APL chess archeology ;) : archive.org/stream/byte-magazine-1984-03/…
 
ngn
page59
 
I like appearing on lists, so I'm going to try to fit BQN symbols in 5x5 pixels and I have some questions
I'm guessing @dzaima and @Marshall are who I should ping?
 
@Wezl probably
 
@dzaima looking at the fonts page, some ⎉s look like (-v-) and BQN386 has a (u)
which design should I use?
 
@ngn p258 The name of the APLer is Jacques Bensimon
 
3:13 PM
oh, apperently it's called circled horizontal bar with notch, so there's my answer
⌾ is not very friendly at low resolutions :{
 
@Wezl in BQN is used as an encircled ˘, so I made it look that way in BQN386. All others do the proper thing of making a ¯V¯ shape in the center
 
ngn
@brgal i feel so stupid. it was p59 from the search results :)
 
@Wezl oh i had to redo all circle symbols to get it to look nicely in BQN386 too
 
ngn
@brgal that's a surprisingly small amount of code for a chess engine
 
It is a checkmate engine
@ngn It is a brute force checkmate engine. It should include code for legal moves. Not many comments for the code ;)
 
ngn
3:20 PM
:D
 
3:35 PM
@KamilaSzewczyk M÷100 is more precise than M×0.01 because 0.01 can't be stored exactly as a double, so you can't just substitute. On the other hand, that's a huge difference—what are you measuring there?
 
@Marshall i'm referring to this APL optimizing guide i linked before
it'd be nice if dyalog had a switch for fast math
 
Dyalog has some scalar division algorithms in 18.0 that are nearly as fast as the multiplication. From the performance notes, "Dividing an array by an arbitrary scalar is 3.0x faster [than 17.1] when the CPU has a fused multiply-add instruction (Intel CPUs since 2013, AMD since 2012 and all supported IBM POWER machines). This operation is more accurate than multiplying by the reciprocal and now has nearly the same speed."
 
i'm sorry, but i can't comprehend how can you divide a generic scalar quicker than using div.
oh, wait, you're speaking of a generalized case of dividing a vector
 
@KamilaSzewczyk Essentially, you encode the reciprocal using two floats to get better precision. I'll try to dig up the paper I used.
 
what about _mm512_div_epi64 then
 
3:39 PM
@KamilaSzewczyk Does your CPU have that instruction?
 
it gets unrolled into a sequence of them, i have no clue what's under it
so no way to tell
my CPU supports AVX2
_mm512_div_pd will work with double precision numbers, but it needs AVX512F
vdivpd will work with just AVX
divpd will work with SSE2, which is basically the baseline of modern x86 machines
 
AVX512 basically doesn't exist in consumer hardware. Intel designed it just as they became unable to build fabs that work.
 
if only dyalog recompiled their products for CPUs with varying feature support.. oh wait...
 
Yes, Dyalog uses vdivpd when available.
 
and there is a quicker way than using vdivpd?
since you mentioned algorithms
 
3:47 PM
@KamilaSzewczyk Here's a blog post with the relevant algorithms.
 
@dzaima since I'm adding BQN and not every other symbol, I'll put a (˘)
 
@Marshall huh, seems smart, but also seems like it's doing quite a bit of approximation
modern (starting with pentium) x86 cpus ship with division tables used by all forms of div
they're probably covered by 12389721983798 NDA's, but seeing smart algorithms outperform it is nice
 
@KamilaSzewczyk Well, the result is an approximation. It just needs to be correctly rounded, so within <0.5 ULP.
 
i wonder if APL fuses operations
to like use this approximating invsqrt instruction
 
Maybe APEX fuses things. Otherwise I've never heard of an implementation doing that.
 
3:51 PM
or to compute hypotenuse with vmulss, vfmadd132ss and vsqrtss instead of two mulss, one addss and sqrtss
there's this intel library which supposedly produces very efficient code for math operations, but i don't remember what was it
 
I think Co-dfns fuses, but only in the sense of putting two operations in the same GPU step, not of actually simplifying them arithmetically. And my understanding is that it just does that by structuring the output so ArrayFire can fuse it, not with actual explicit support.
 
from what I have observed, APL programmers often prefer idiomatic code over structured code
which sort of makes sense, because you can optimize out stuff manually, so the interpreter doesn't have to worry much about the high-level overview of the code
 
ngn
@KamilaSzewczyk pardon my ignorance, what's the difference?
 
i've seen the J folks bragging that their interpreter can find better algorithms for performing common tasks
 
@KamilaSzewczyk You can take the magnitude of a complex number to do a hypotenuse computation. Not as easy to optimize as you might think because of overflow and underflow problems.
 
3:55 PM
>You can take the magnitude of a complex number to do a hypotenuse computation
yes, but x86 as far as i can tell doesn't have any extra instructions for complex arithmetic
@ngn structured to me means "with layers of abstraction layed one on another"
and, again, from my observations, APL programmers often prefer to write their code using more builtins than existing generic structures
they prefer to write a working solution, scrap it, and write another idiomatic solution instead if requirements change
which, from a compiler author's point of view, is a very good mindset
 
ngn
@KamilaSzewczyk except dyalog's customers, i hear they don't enjoy rewriting their code :)
 
@KamilaSzewczyk Complex numbers are just pairs of doubles internally. So to get the hypotenuse of arrays A and B just use |A+0j1×B. The layout for an array of complex numbers as an array of pairs of doubles instead of a pair of arrays isn't ideal, but doesn't introduce too much overhead.
 
@ngn rewriting all code is a bit tedious. rewriting a single function is comparatively pretty easy
 
I don't think complex | is vectorized, but maybe the C compiler does some autovectorization (which would be limited to SSE because it's compiled for generic hardware).
 
ngn
an apl function a day keeps backwards compatibility away
 
4:01 PM
hahaha
 
ngn
(i know backwards compatibility is generally a good thing, but i've come to associate it with the stagnation in causes in apl)
 
Argh, apparently my editor isn't sophisticated enough to handle the surrogate pairs of 𝕤, I'm going to have to try using ligatures
phew, it works
 
ngn
@KamilaSzewczyk can you recommend a way of dealing with int overflows in large vectors?
 
@ngn well, that's the sad reality of most businesses and their sunken cost fallacy
@ngn i'm not sure if i understand your question; you want to test if an overflow happens (somewhere) after performing an operation?
 
@Wezl Wait, I'm not sure this makes sense. Your editor encodes text as UTF-16 but displays surrogate pairs separately? How do you enter 𝕤 if not as a single character? How does it know how to split it into surrogate pairs, but not how to combine them for display?
 
4:12 PM
@Marshall here's how it shows them:
 
ngn
@KamilaSzewczyk suppose i want to add the vectors 0 50 100 and 150 200 250 and i represent them as 1 byte per element. the operation will overflow on the third element. so, i need to detect that somehow, widen the representation to 2 bytes, and either start from scratch or carry on from where the overflow occurred
 
 
ngn
@KamilaSzewczyk how would you implement ^^that? ideally in a fast and simple way
 
I can create a new ligature of high surrogate pair $$$$ and low surrogate pair $$$$ and set it to whatever the glyph should be, then it works just fine
 
Oh, you meant font editor. That's even weirder. Fonts can't have glyphs for surrogate code points, because they aren't characters!
 
4:16 PM
i'm slightly surprised that a font editor of all things doesn't know how to handle unicode ¯\_(ツ)_/¯
 
Javascript is to blame, I guess.
 
most likely, but it's working now
 
As long as the font file comes out right, I guess...
 
hmmm
first idea: somehow handle #XM
some flag in the MXCSR register must be set and #XM unmasked for this interrupt to be generated
then you can handle overflow (#O) and underflow (#U)
 
ngn
@KamilaSzewczyk how do i even duckduckgo this :)
 
4:21 PM
google: SIMD Floating point exception
i think Intel SDM will help on that one
 
@KamilaSzewczyk isn't that only for floating point, i.e. not 8-bit ints?
 
hmmmmm
yeah
but this could apply to single => double precision conversion!
 
Does absolutely anyone have a preference -- should diamonds ⋄ be hollow?
 
@Wezl it should be (especially if you have BQN's )
 
4:45 PM
also how are you even gonna 𝕨
 
Hi all!
I'm trying to solve a simple problem, but I don't know why I get 0/100!
It seems working when I test on my console :/
 
@Curio this is a room specifically for the language APL, java coding challenges are quite off-topic here
 
Sorry, I didn't know that
I found the room in Code Golf
 
5:20 PM
@dzaima @ngn got the answer!
 
5:30 PM
nice
 
5:40 PM
@Curio dzaima/APL is in java so simply copy paste that and use {0~⍨m⌷⍨⊃⍒+/m←m⌿⍨∧/2≥/m←0~⍨⍤1⊢⍵×⍤1⍉2⊥⍣¯1⊢⍳2*≢⍵} :)
 
@rak1507 I haven't understood :/
 
it's not a serious suggestion, apart from anything that code is O(2^n)
 
So time is the problem
How should I deal with this kind of problem?
 
by asking somewhere other than here... like dzaima said it is not relevant to this channel at all
 
Okay I'll do that
Thanks
 
5:49 PM
also @ngn can i ask, what's wrong with having everything of the right type from the start
 
@KamilaSzewczyk you don't know the "right type" beforehand
 
@dzaima int64_t
 
@KamilaSzewczyk but that takes 8x as much RAM and, as a result, is 8x slower
 
what if you make it up to the user to manage the type?
 
@dzaima slower compared to what?
a memmove and having to operate on single scalars? never.
 
5:53 PM
@KamilaSzewczyk no, this is for vectors
 
i know! but to detect overflow, you need to examine single elements of vectors!
 
@KamilaSzewczyk you can certainly detect overflow with vectorizable operations, that much I know
 
yes, using math tricks
which are somewhat brittle
and they for sure take more to execute than just the operation
you'd need to first add, and then compute overflow using (sum ^ a) & (sum ^ b), for example, if we're doing addition
 
so, say you have 1+1+1+1+100000⍴⍳10. The will create a vector of int8s. The first + will upcast to int16s, the next will upcast to int32s, the next to int64s, and now you're taking 8x the RAM. That's very much not ideal
 
yes
it's bad
but i can't think of anything better
 
5:58 PM
@KamilaSzewczyk assuming OoO execution, wouldn't that just be done in parallel to calculating the next batch or something?
 
hmmmm
may it be
also, do we fix up the entire vector to int16_t's?
or just single elements?
how do we keep track of the size of each vector's element in case of the second one
 
@dzaima (plus, RAM speed will be a limiting factor anyways)
@KamilaSzewczyk right, that's the part ngn is asking about
 
it seems much slower than just outright having u16
honestly
you'll have to recopy this huge array everything it happens
 
@KamilaSzewczyk right, but one operation it gets slower than just having u32, and on the next, u64
i think it's fine to just assume overflows are rare, and start over with a bigger array when it does happen
an array will only ever be expanded a maximum of 3 times anyways
 
is it really worth it given that an array will be using 1M instead of 8M
 
6:04 PM
@KamilaSzewczyk 8x more space means 8x smaller vector registers which should approximately mean everything is 8x slower
 
what?
hmmm
i see
 
plus simple operations easily hit the RAM speed limit, at which point memory usage is proportional to speed
 
hmmm yeah
 
so, my way would probably be to have 2 functions for each array size, one just adding, and one checking for overflow, and if it's hit, return call the next size non-overflow method's result. (at which point it might be fun to play around with storing an estimate of the max item in the array so you could potentially skip overflow checking when it makes sense)
@dzaima actually no, you'd need separate functions taking the current size args and returning either the current size and one size up. It's complicated :|
just autogenerate a spam of every combination ¯\_(ツ)_/¯
 
In dyalog, is there a way to perform this assignment without bracket indexing? {rt[⍸0=(⍵⊃rs)⍸ri],←⍵}¨⍳≢rs
 
6:14 PM
@goof I imagine something like {((0=(⍵⊃rs)⍸ri)/rs),←⍵}¨⍳≢rs should work
 
Hmm, that's a length error..
rt is a list of empty vectors: rt←(≢ri)↑⊂⍬ (that's another thing I'm wondering about -- is there a simpler way to initialize it or even avoid having to initialize altogether)?
 
@goof I'd use instead of there
 
Any particular reason why?
 
@goof here, not really. But it's not really the proper way to initialize an array of equal elements - see 3↑⊂1 2 vs 3⍴⊂1 2
 
I see, thank you
 
6:21 PM
@goof hm, works for me (though that's a very simplified example)
ri and rs have the same number of items, right? no, that shouldn't matter
 
Nope,
```
ri
1 15 19 29 34 36 41 46 50 65 68 75 79 84 86 91 99
      rs
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬────┬─────┬─────┐
│15 84│50 79│41 68│19 86│65 99│15 75│34 36│1 91│29 46│15 99│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴────┴─────┴─────┘
```
 
@goof oh, i wrote the wrong variable.. {((0=(⍵⊃rs)⍸ri)/rt),←⍵}¨⍳≢rs should work
@dzaima and it does!
 
That does indeed work, thanks
 
furthermore, rs{((0=⍺⍸ri)/rt),←⍵}¨⍳≢rs is slightly cleaner
 
Hmm I'm not sure why that works.. does ¨ select each from left and right argument?
 
6:35 PM
@goof yep - it pairs each item from the left to the corresponding one on the right, and passes both as and
anyways gtg for ~15mins
 
Alright thanks, I guess I thought it was passing each of right and left as a whole
 
6:53 PM
@RikedyP @MartinJaniczek Reinstated as section on APL Orchard page.
 
Dyalog's ⍤ rank operator seems to have a lot more features than I remember, were these features just added in 18.0?
 
@phantomics 18.0 just added the case where both args are functions. Everything else isn't new
 
 
3 hours later…
9:59 PM
@ngn dan luu measured manual overflow checks as being fairly cheap. However he wasn't using vector instructions, and those don't set flags. One possibility might be to use saturating instructions, and use the top/bottom values as sentinels
also found this paper, but doesn't seem to be freely available anywhere
 
10:49 PM
@user1139711 Hi m1ndb3nd3r, and welcome to the APL Orchard. While most discussions here are about APL, J is also on-topic. Enjoy!
 

« first day (1459 days earlier)      last day (33 days later) »