Bind is not relevant here, since I'm talking about the execution of i., which must inevitably happen at some point to be of any use.
Also, I don't see how there could possibly be a tradeoff between the time taken to write the results of a multiplication and evaluate it. In any event my tests had both python and j print the result of '! y', which should favor j even, since it only writes the first 256 digits, whilst python prints the entire number. James Faure ________________________________ From: Source <source-boun...@forums.jsoftware.com> on behalf of Raul Miller <rauldmil...@gmail.com> Sent: Monday, February 26, 2018 7:08:31 PM To: Source forum Subject: Re: [Jsource] Propositions This is the "sweep it under the rug" design aesthetic - very useful when dealing with infinities and/or any other calculations which you really do not want to perform. That said, J already supports this kind of thing - albeit with slightly different syntax. For example, you can do: i. bind 1e7 and 1 + i. bind 1e7 and J will faithfully not perform the indicated calculations, quite yet (but still stashes them so that if you later change your mind it can instead perform them). And, yes, the current extended precision implementation is slow for multiplications (though fast for display). It's a design tradeoff, and perhaps one which should be reconsidered. (Though memory management and cross platform stability and support are critical issues which can take precedence over mere performance.) Or at least: that's how I understand this issue... Thanks, -- Raul On Mon, Feb 26, 2018 at 12:48 PM, james faure <james.fa...@epitech.eu> wrote: > I have 2 major propositions: > > Recently, I (to my chagrin) demonstarted to a friend that '>: i.1e7' takes > almost twice as long as 'i.1e7'. Of course I expected them both to execute > instantly, not after a full second. So my suggestion: i. should return a > 'range' (or 'i.') object containing three vars: 'start end step'. In this > way, '+ - * %' and indeed any linear combination of linear operations can be > executed on only 3 variables rather than #y . besides the immediate speed and > memory improvements here, other operations (on i. objects), like '+/ */ e. > i.' etc.. can now be found by direct calculation, without ever spawning a > physical array! Another fascinating possibility becomes available: 'i._'. > Thus something like '*/ x * y ^ - i. _' is now able to return the result of > the infinite geometric series. In fact in general it may be very profitable > to use virtual arrays only, unless forced otherwise. Another concrete > example: when searching for the first number to satisfy a certain property, > one could use 'i.@u seq i. _' rather than some likely inefficent variation of > ^: or while. . Perhaps this 'array only when forced' approach may even void > the need for special combinations, a concept which feels suspicious to me. > > Secondly: operations on extended precision numbers are unbelievably slow... > The most direct example: '! 100000x' takes 50 (!) times longer than python3's > math.factorial(100000). It should be well worth looking into llvm's APInt and > APfloats http://llvm.org/doxygen/classllvm_1_1APInt.html, or perhaps > Cpython's bigint's > https://github.com/python/cpython/blob/65d4639677d60ec503bb2ccd2a196e5347065f27/Objects/longobject.c, > I wouldn't think it's necessary to write another custom library. [https://avatars2.githubusercontent.com/u/1525981?s=400&v=4]<https://github.com/python/cpython/blob/65d4639677d60ec503bb2ccd2a196e5347065f27/Objects/longobject.c> python/cpython<https://github.com/python/cpython/blob/65d4639677d60ec503bb2ccd2a196e5347065f27/Objects/longobject.c> github.com cpython - The Python programming language LLVM: llvm::APInt Class Reference<http://llvm.org/doxygen/classllvm_1_1APInt.html> llvm.org Class for arbitrary precision integers. APInt is a functional replacement for common case unsigned integer type like "unsigned", "unsigned long" or "uint64_t", but ... > > James Faure > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm J Forums<http://www.jsoftware.com/forums.htm> www.jsoftware.com Forums. The J forum mailing lists give life to the J community. They are the best way to get help, help others, report bugs, and share your interest in J. ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm J Forums<http://www.jsoftware.com/forums.htm> www.jsoftware.com Forums. The J forum mailing lists give life to the J community. They are the best way to get help, help others, report bugs, and share your interest in J. ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm