Just so I can find this easily, next time I am searching for it - yes, you are right.
Here's a properly labeled and implemented lngamma: lngamma=: ^.@!@(1 | ]) + +/@:^.@(1 + 1&| + i.@<.)@<: Thanks, -- Raul On Wed, Jun 10, 2015 at 5:43 PM, Jose Mario Quintana <[email protected]> wrote: > I would rather name lngamma as lnfactorial since, > > ^lngamma("0) 0 1 2 3 4 5 > 1 1 2 6 24 120 > > Be that as it may, Roger’s approach is very neat as opposed to, > > LogFact=. ^.@:!`((((2 %~ ^. o. 2) + (-&0.5 * ^.) + -@:] + %@:(12&*)) + > %@:(360 * ^&3) + %@:(1260 * ^&5))@:>:)@.(170&<)"0 > > 55 Wrap 'LogFact' > ^.@:!`(((0.91893853320467267 + (-&0.5 * ^.) + -@:] + %@ > :(12&*)) + %@:(360 * ^&3) + %@:(1260 * ^&5))@:>:)@.(170 > &<)"0 > > However, I could not resist comparing their performance, > > (lngamma -: LogFact) 1111.1 > 1 > > st=. (, */&.:>@:(1 2&{))@:(] ; 7!:2@:] ; 6!:2) > > 111 st&> 'lngamma 1111.1' ; 'LogFact 1111.1' > ┌────────────────┬─────┬──────────┬─────────┐ > │lngamma 1111.1│34944│3.61106e_5│1.26185 │ > ├────────────────┼─────┼──────────┼─────────┤ > │LogFact 1111.1│2944 │1.3729e_5 │0.0404183│ > └────────────────┴─────┴──────────┴─────────┘ > 111 st&> 'lngamma 11111.1' ; 'LogFact 11111.1' > ┌────────────────┬──────┬───────────┬─────────┐ > │lngamma 11111.1│264320│0.000197226│52.1308 │ > ├────────────────┼──────┼───────────┼─────────┤ > │LogFact 11111.1│2944 │5.70576e_6 │0.0167978│ > └────────────────┴──────┴───────────┴─────────┘ > 111 st&> 'lngamma 111111.1' ; 'LogFact 111111.1' > ┌────────────────┬───────┬──────────┬─────────┐ > │lngamma 111111.1│2099328│0.00184993│3883.61 │ > ├────────────────┼───────┼──────────┼─────────┤ > │LogFact 111111.1│2944 │5.92946e_6│0.0174563│ > └────────────────┴───────┴──────────┴─────────┘ > > Nevertheless, I favor neatness over performance when posting to Rosetta > Code. > > > > On Wed, Jun 10, 2015 at 10:24 AM, Raul Miller <[email protected]> wrote: > >> Ohh, that is really nice. >> >> Or, converted to tacit: >> >> lngamma=: ^.@!@(1 | ]) + +/@:^.@(1 + 1&| + i.@<.) >> >> Thanks! >> >> -- >> Raul >> >> >> On Wed, Jun 10, 2015 at 10:15 AM, Roger Hui <[email protected]> >> wrote: >> > For non-negative real x, !x can be computed as (!1|x)**/(1+1|x)+i.<.x, >> > therefore ^.x is ^. of the long expression, which is >> > (^.!1|x)++/^.(1+1|x)+i.<.x . For example: >> > >> > x=: 4.75 >> > !x >> > 78.7845 >> > (!1|x)**/(1+1|x)+i.<.x >> > 78.7845 >> > >> > ^.!x >> > 4.36672 >> > (^.!1|x)++/^.(1+1|x)+i.<.x >> > 4.36672 >> > >> > x=: 140.23 >> > ^.!x >> > 556.358 >> > (^.!1|x)++/^.(1+1|x)+i.<.x >> > 556.358 >> > >> > Works for non-negative integers: >> > >> > x=: 10 >> > ^.!x >> > 15.1044 >> > (^.!1|x)++/^.(1+1|x)+i.<.x >> > 15.1044 >> > >> > x=: 0 >> > ^.!x >> > 0 >> > (^.!1|x)++/^.(1+1|x)+i.<.x >> > 0 >> > >> > >> > >> > On Wed, Jun 10, 2015 at 6:36 AM, Raul Miller <[email protected]> >> wrote: >> > >> >> Yes. >> >> >> >> Motivation is this rosettacode task: >> >> http://rosettacode.org/wiki/Calculate_P-Value >> >> >> >> Thanks, >> >> >> >> -- >> >> Raul >> >> >> >> On Wed, Jun 10, 2015 at 9:25 AM, Roger Hui <[email protected]> >> >> wrote: >> >> > Can the argument be other than positive integers? >> >> > >> >> > On Wed, Jun 10, 2015 at 6:22 AM, Raul Miller <[email protected]> >> >> wrote: >> >> > >> >> >> Does anyone have an implementation of ^.@! which will work for >> >> >> moderately large values (like 1000)? >> >> >> >> >> >> 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 >> >> ---------------------------------------------------------------------- >> >> 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
