Sorry, I was wrong, but in a slightly different way: I meant tolerant comparison, in this case to return the signum. To clarify:
l=: 0.210224j2.92605e_98 _7.31512e_99j0.210224 (*!.0)&+. l NB. intolerant comparison 1 1 _1 1 (*)&+. l NB. tolerant comparison 1 0 0 1 (*|@*)&.+. l 0.210224 0j0.210224 (*|@(*!.0))&.+. l NB. doesn't work with intolerant comparison 0.210224j2.92605e_98 _7.31512e_99j0.210224 The tolerance used by * is indeed an absolute tolerance with respect to 0. Jan-Pieter On Mon, Feb 22, 2021, 22:54 Henry Rich <[email protected]> wrote: > You meant to write that (* y) uses absolute precision. > > Henry Rich > > On 2/22/2021 4:36 PM, Jan-Pieter Jacobs wrote: > > If I got it correctly, the purpose is removing near-0 numbers, correct? > > > > I recently used the following for an Advent of Code solution: > > > > list=: 0.210224j2.92605e_98 _7.31512e_99j0.210224 > > (*|@*)&.+. list > > 0.210224 0j0.210224 > > > > The (*|@*) I picked up from one of the big shots here at the forum, if I > > recall correctly. It relies on * using relative precision, making it > return > > 0 for near-zero components. > > > > I hope it's useful! > > > > Best regards, > > > > Jan-Pieter > > > > > > > > On Sun, Feb 21, 2021, 19:14 Raul Miller <[email protected]> wrote: > > > >> 33j15":1j1 > >> 1.000000000000000 > >> ":1j1 > >> 1j1 > >> > >> It looks like that's an issue with the dyadic form of ": > >> > >> (Using anything larger than j15 for the left argument of ": is rarely > >> wise, unless you're working with exact or rational numeric types.) > >> > >> Thanks, > >> > >> -- > >> Raul > >> > >> > >> On Sun, Feb 21, 2021 at 9:05 AM Don Guinn <[email protected]> wrote: > >>> A different issue - ": ignores the imaginary part of a number. > >>> > >>> 33j30":1j1 > >>> > >>> 1.000000000000000000000000000000 > >>> > >>> On Sun, Feb 21, 2021 at 3:55 AM Raul Miller <[email protected]> > >> wrote: > >>>> Ok, let's walk through this. > >>>> > >>>> First, let's extract the J's binary representation of pi: > >>>> ' '-.~":(64#2)#:256x#.|.a.i.2(3!:5) o.1 > >>>> 0100000000001001001000011111101101010100010001000010110100011000 > >>>> > >>>> To interpret this, let's refer to the wikipedia page on this numeric > >>>> format: > >>>> https://en.wikipedia.org/wiki/Double-precision_floating-point_format > >>>> > >>>> (];.1~0 1 12 e.~i.@#)' '-.~":#:256x#.|.a.i.2(3!:5) o.1 > >>>> (];.1~0 1 12 e.~i.@#)' '-.~":(64#2)#:256x#.|.a.i.2(3!:5) o.1 > >>>> 0 > >>>> 10000000000 > >>>> 1001001000011111101101010100010001000010110100011000 > >>>> > >>>> The sign flag is zero, which means it's a positive number. Negative > >>>> numbers have a sign flag of 1. > >>>> > >>>> The binary exponent is > >>>> 2b10000000000-1023 > >>>> 1 > >>>> > >>>> Or, we've got a binary fraction which we'll be multiplying by 2. > >>>> > >>>> The binary fraction is > >>>> 2b1.1001001000011111101101010100010001000010110100011000 > >>>> 1.5708 > >>>> > >>>> Or, the actual value is: > >>>> 2*2b1.1001001000011111101101010100010001000010110100011000 > >>>> 3.14159 > >>>> > >>>> Our problem is that this is not the actual value of pi, it's just an > >>>> approximation. > >>>> > >>>> If we want to work with a better approximation, we might do something > >> like > >>>> this: > >>>> pistring=:{{)n > >>>> 3.14159265358979323846264338327950288419716939937510582097494459 > >>>> 2307816406286208998628034825342117067982148086513282306647093844 > >>>> 6095505822317253594081284811174502841027019385211055596446229489 > >>>> 5493038196442881097566593344612847564823378678316527120190914564 > >>>> 8566923460348610454326648213393607260249141273724587006606315588 > >>>> 1748815209209628292540917153643678925903600113305305488204665213 > >>>> 8414695194151160943305727036575959195309218611738193261179310511 > >>>> 8548074462379962749567351885752724891227938183011949129833673362 > >>>> }}-.LF > >>>> > >>>> pirat=: (".(pistring,'x')-.'.')%_10x^_2+#pistring > >>>> > >>>> 60{.' '-.~":#:(2^64x)*pirat > >>>> 110010010000111111011010101000100010000101101000110000100011 > >>>> > >>>> There's a trailing 0100011 on that binary fraction which would make > >>>> our representation just a bit more accurate (but which would also make > >>>> J slower, because we would no longer be taking advantage of the > >>>> specialized hardware supporting the number format). > >>>> > >>>> This would crop up if we're subtracting something from pi (or adding a > >>>> negative number), in a fashion which lops off leading digits from the > >>>> representation. > >>>> > >>>> Short form: if we're going to be using + or - on values which are > >>>> non-zero multiples of pi, this might matter. > >>>> > >>>> I hope this made sense. > >>>> > >>>> -- > >>>> Raul > >>>> > >>>> On Sun, Feb 21, 2021 at 2:14 AM 'Bo Jacoby' via Programming > >>>> <[email protected]> wrote: > >>>>> Thank you all for the comments! > >>>>> Raul wrote: "A cost, though, of that kind of approach, is that it > >> would > >>>> lure us into a false sense of security, leaving us even more upset in > >> other > >>>> circumstances." > >>>>> Which circumstances are you thinking of? > >>>>> The rounding to zero is beneficial in all the cases mentioned in the > >>>> comments, and I fail to construct examples where it is not. > >>>>> (^ j. 1p1) NB. confusing > >>>>> > >>>>> _1j1.22465e_16 > >>>>> f0(^ j. 1p1) NB. clear > >>>>> _1 > >>>>> > >>>>> > >>>>> > >>>>> f0 9e99j1e6 > >>>>> > >>>>> 9e99 > >>>>> > >>>>> > >>>>> Thanks. > >>>>> Bo. > >>>>> > >>>>> Den søndag den 21. februar 2021 07.32.51 CET skrev Joey K Tuttle > >> < > >>>> [email protected]>: > >>>>> Ahh for the good ole days ;-) > >>>>> > >>>>> JVERSION > >>>>> Binary: j601binc_linux32 > >>>>> Library: j601libc > >>>>> Help: j601hlpc > >>>>> Engine: j601/2006-11-17/17:05 > >>>>> ^ o.0j1 > >>>>> _1 > >>>>> ^j.1p1 > >>>>> _1 > >>>>> > >>>>> But time marches on and things change ... > >>>>> > >>>>> JVERSION > >>>>> Installer: j602a_linux32.sh > >>>>> Engine: j602/2008-03-03/16:45 > >>>>> Library: 6.02.023 > >>>>> ^ o. 0j1 > >>>>> _1j1.22461e_16 > >>>>> (^j.1p1) > >>>>> _1j1.22461e_16 > >>>>> > >>>>> > >>>>> JVERSION > >>>>> Engine: j903/j64avx2/darwin > >>>>> Beta-e: commercial/2021-02-16T18:34:19 > >>>>> Library: 9.03.01 > >>>>> Platform: Darwin 64 > >>>>> Installer: J903 install > >>>>> InstallPath: /applications/j903 > >>>>> Contact: www.jsoftware.com > >>>>> ^j.1p1 > >>>>> _1j1.224646799e_16 > >>>>> NB. but even today the formatted result is satisfying. > >>>>> 33j30 ": ^ o. 0j1 > >>>>> _1.000000000000000000000000000000 > >>>>> > >>>>> > >>>>>> On 2021Feb 20, at 11:12, Henry Rich <[email protected]> wrote: > >>>>>> > >>>>>> No, the code is still there, but it doesn't do much - gives a > >> little > >>>> bit better precision on large arguments IIRC. > >>>>>> Henry Rich > >>>>>> > >>>>>> On 2/20/2021 2:10 PM, Roger Hui wrote: > >>>>>>> https://www.jsoftware.com/papers/APLQA.htm#worldmathsday > >>>>>>> > >>>>>>> * ○ 0j1 × 2e9 + a ÷ 2 > >>>>>>> 1 0J1 ¯1 0J¯1 > >>>>>>> 1 0J1 ¯1 0J¯1 > >>>>>>> 1 0J1 ¯1 0J¯1 > >>>>>>> > >>>>>>> (Basically, ^ o. 0j1 * 2e9 + a % 2 where a=: 3 4$i.12) > >>>>>>> > >>>>>>> I thought I did the same in J, predating what's done in Dyalog > >> APL. > >>>>>>> According to > >> https://www.jsoftware.com/help/dictionary/special.htm, > >>>> there > >>>>>>> is supposed to be special code for ^@o., but apparently it got > >> lost > >>>>>>> somewhere, sometime. > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> On Sat, Feb 20, 2021 at 9:45 AM Raul Miller < > >> [email protected]> > >>>> wrote: > >>>>>>>> On Sat, Feb 20, 2021 at 12:46 AM María Magdalena Mixuhca > >>>>>>>> <[email protected]> wrote: > >>>>>>>>> I find this lack of beauty surprisingly disturbing: > >>>>>>>>> > >>>>>>>>> (^ j. 1p1) > >>>>>>>>> _1j1.22465e_16 > >>>>>>>> Ok... so... > >>>>>>>> > >>>>>>>> I think what we want here is a handling of > >>>>>>>> exponentials/transcendentals so that necessarily minimal > >> deviations > >>>>>>>> from pi are smoothly handled so that we get zeros when we expect > >>>> them. > >>>>>>>> A cost, though, of that kind of approach, is that it would lure > >> us > >>>>>>>> into a false sense of security, leaving us even more upset in > >> other > >>>>>>>> circumstances. > >>>>>>>> > >>>>>>>> Still... it's an interesting challenge. > >>>>>>>> > >>>>>>>> Thanks, > >>>>>>>> > >>>>>>>> -- > >>>>>>>> Raul > >>>>>>>> > >>>> ---------------------------------------------------------------------- > >>>>>>>> For information about J forums see > >>>> http://www.jsoftware.com/forums.htm > >> ---------------------------------------------------------------------- > >>>>>>> For information about J forums see > >>>> http://www.jsoftware.com/forums.htm > >>>>>> > >>>>>> -- > >>>>>> This email has been checked for viruses by AVG. > >>>>>> https://www.avg.com > >>>>>> > >>>>>> > >> ---------------------------------------------------------------------- > >>>>>> For information about J forums see > >> http://www.jsoftware.com/forums.htm > >>>>> > >> ---------------------------------------------------------------------- > >>>>> For information about J forums see > >> http://www.jsoftware.com/forums.htm > >>>>> > >> ---------------------------------------------------------------------- > >>>>> For information about J forums see > >> http://www.jsoftware.com/forums.htm > >>>> ---------------------------------------------------------------------- > >>>> For information about J forums see > http://www.jsoftware.com/forums.htm > >>>> > >>> ---------------------------------------------------------------------- > >>> For information about J forums see http://www.jsoftware.com/forums.htm > >> ---------------------------------------------------------------------- > >> For information about J forums see http://www.jsoftware.com/forums.htm > >> > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > -- > This email has been checked for viruses by AVG. > https://www.avg.com > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
