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

Reply via email to