Raul, D’oh. *Sigh*. It helps. Many thanks. I appreciate your patience as much as your knowledge and willingness to help.
Ed Sent from my iPad > On Apr 27, 2022, at 3:36 PM, Raul Miller <rauldmil...@gmail.com> wrote: > > You should have used > squares =: *: x: >: ? 1e5 $ 1e11 > > Computing the square using floating point and then converting to > extended precision means that many of your values in 'squares' are not > actually square. > > For example: > > x: *: 68824904566 > 4736867488519007764480 > *: x: 68824904566 > 4736867488519007648356 > > That said, here's a working tacit implementation of what I think you > are looking for: > > intsq=: = [: *: <.@%: > > This works for *: x: >: ? 1e5 $ 1e11 and detects that some numbers in > x: *: >: ? 1e5 $ 1e11 are not square. > > I hope this helps, > > -- > Raul > >> On Wed, Apr 27, 2022 at 9:34 AM Ed Gottsman <edward.j.gotts...@gmail.com> >> wrote: >> >> Oops. Foolish error as I prepared for presentation. My apologies. >> >> Here’s the accurate implementation of intsqrt. >> >> intsqrt =: 3 : 0 >> NB. y An array of possible integer squares >> NB. Return 0 for non-squares or integer roots >> s * y = x: *: s =. <. 0.5 + x: 10 ^ -: x: 10 ^. y >> ) >> >> Note that it is explicit to the point of being obscene. I’ll leave the >> tacit implementation to someone more experienced than I. >> >> Thanks. >> >> Ed >> >> Sent from my iPad >> >>>> On Apr 27, 2022, at 1:50 PM, Ed Gottsman <edward.j.gotts...@gmail.com> >>>> wrote: >>> >>> >>> Project Euler #66, extended precision integer square roots, no spoilers >>> >>> Continuing the discussion, for which again thank you all: I found that what >>> I really wanted was large *integer* square roots. Since this seems to come >>> up frequently in Project Euler problems and since I believe there are Euler >>> participants on the mailing list, here’s an integer square root verb that >>> uses the extended precision facilities and works on roots up to 1e11. >>> (Note that %: does not participate in extended precision.) >>> >>> N.B.: I have not cracked #66 and nothing in this post should be construed >>> as endorsing an approach to solving it. This is just a J implementation of >>> a utility verb. >>> >>> intsqrt =: 3 : 0 >>> NB. y Possible squares of integers. Return either integer >>> NB. square roots or 0s. >>> +Multiply to produce either integer square roots or 0s >>> | +1s where the calculated square = the original square >>> | | +Force extended precision on *: >>> | | | +Square the square roots >>> | | | | +Round the square roots to an integer >>> | | | | | +Force extended precision on ^ >>> | | | | | | +Calculate the square roots >>> | | | | | | | +0.5(log(n)) = log(sqrt(n)) >>> | | | | | | | | +Force extended precision on ^. >>> | | | | | | | | | +Log base 10 >>> | | | | | | | | | | >>> y * y = x: *: <. 0.5 + x: 10 ^ -: x: 10 ^. Y >>> ) >>> >>> (If J were written vertically, it might be easier to comment.) >>> >>> NB. Testing the verb… >>> >>> squares =: x: *: >: ? 1e5 $ 1e11 NB. 100000 integer squares <= 1e11 ^ 2 >>> >>> (+/ 0 < intsqrt squares) NB. All of the numbers are integer squares >>> 100000 >>> >>> +/ 0 = intsqrt >: squares NB. None of the numbers are integer squares >>> 100000 >>> >>> squares =: x: *: >: ? 1e5 $ 1e12 NB. Increase the roots to 1e12 >>> >>> +/ 0 < intsqrt squares NB. Above 1e11, extended precision starts to fail >>> 77537 >>> >>> (6!:2) 'intsqrt squares' NB. Fast, it is not. (J901 on iPadOS) >>> 1.59675 >>> (6!:2) '%: squares' NB. Fast but inaccurate for large squares >>> 0.013432 >>> >>> Ed >>> >>> P.S. Devon, I’ll be there. Thanks. >>> >>> Sent from my iPad >>> >>>>> On Apr 22, 2022, at 6:11 AM, Devon McCormick <devon...@gmail.com> wrote: >>>>> >>>> Hi Ed, >>>> I was thinking of explaining Roger's sqrt code as part of next month's >>>> NYCJUG. >>>> You should take a look: >>>> https://www.meetup.com/J-Dynamic-Functional-Programming/ . >>>> Cheers, >>>> Devon >>>> >>>> On Fri, Apr 22, 2022 at 12:49 AM Ed Gottsman <edward.j.gotts...@gmail.com> >>>> wrote: >>>> >>>>> Thanks to everyone who responded and in particular for the link to Roger >>>>> Hui’s essay. The wiki discussion was also very good. >>>>> >>>>> (In an earlier life I disparaged “cargo cult” programming, in which you >>>>> take a few lines of source you don’t understand and integrate them into >>>>> your program. [That you effectively do the same thing when you adopt >>>>> someone else’s compiled library cut no ice with me.] J has forced me to >>>>> relax a bit in that regard and I will probably adopt some of Roger’s code >>>>> without entirely understanding it. :-) ) >>>>> >>>>> Thanks again. >>>>> >>>>> Ed >>>>> >>>>> Sent from my iPad >>>>> >>>>>>> On Apr 21, 2022, at 8:18 PM, Gilles Kirouac <g1...@myriade.ca> wrote: >>>>>> >>>>>> Ed If you expand the Extended Integers section (below by bob), you will >>>>> see a link to an essay by Roger on 'Extended Precision Functions'. There >>>>> is >>>>> a Square Root verb. >>>>>> >>>>>> NB. long rational result may exceed line length >>>>>> sqrt 1x + *: 999999999x >>>>>> >>>>> 1249999998750000000625000000625000000468750000156249999765624999453r1250000000000000000000000000000000000000000000000000000000 >>>>>> sqrt *: 999999999x >>>>>> 999999999 >>>>>> >>>>>> >>>>>> ~ Gilles >>>>>> >>>>>>> Le 2022-04-21 à 14:50, 'robert therriault' via Programming a écrit : >>>>>>> Gilles, >>>>>>> In Nuvoc the extended constant notation can be found here >>>>> https://code.jsoftware.com/wiki/Vocabulary/Constants#Extended_Integers >>>>>>> Having said that, it is hidden pretty well and most of its references >>>>> are previous documentation on the jsoftware site. There is certainly work >>>>> to be done on the wiki! >>>>>>> Cheers, bob >>>>>>>>> On Apr 21, 2022, at 11:44, Gilles Kirouac <g1...@myriade.ca> wrote: >>>>>>>> >>>>>>>> Ed >>>>>>>> >>>>>>>> You seem unaware of the extended precision constant notation: >>>>>>>> >>>>>>>> "digits with a trailing x denote an extended precision integer" >>>>>>>> >>>>>>>> https://www.jsoftware.com/help/dictionary/dcons.htm >>>>>>>> [Where is the equivalent in NuVoc?] >>>>>>>> >>>>>>>> I would rather write >>>>>>>> >>>>>>>> 1x + *: 999999999x >>>>>>>> 999999998000000002 >>>>>>>> >>>>>>>> ~ Gilles >>>>>>>> >>>>>>>> Le 2022-04-21 à 12:51, Henry Rich a écrit : >>>>>>>>> 3!:0 %: x: 1 + x: *: x: 999999999 >>>>>>>>> 8 >>>>>>>>> The square root cannot be represented exactly. >>>>>>>>> Henry Rich >>>>>>>>> On 4/21/2022 12:43 PM, Ed Gottsman wrote: >>>>>>>>>> Hello. >>>>>>>>>> I’m working on the Project Euler “Diophantine equation” problem >>>>> (#66) and using J’s extended precision facilities. I’ve run into behavior >>>>> that confuses me. Boiled down (and overusing x: just to be sure): >>>>>>>>>> x: %: x: 1 + x: *: x: 999999999 >>>>>>>>>> 999999999 >>>>>>>>>> That is (if my syntax is right), the square root of (one plus the >>>>> square of a really large n) is n. I’m apparently misunderstanding >>>>> something about extended precision. I’ve tried it with a variety of uses >>>>> of x: but to no avail, and as I read the x: documentation…this is an odd >>>>> result. >>>>>>>>>> >>>>>>>>>> Any help would be much appreciated. >>>>>>>>>> (J901 on iPadOS, for which sincere kudos to Ian Clark.) >>>>>>>>>> Many thanks. >>>>>>>>>> Ed >>>>>>>>>> >>>>> ---------------------------------------------------------------------- >>>>>>>>>> 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 >>>>> >>>> >>>> >>>> -- >>>> >>>> Devon McCormick, CFA >>>> >>>> Quantitative Consultant >>>> ---------------------------------------------------------------------- >>>> 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